Skip to main content

freedome_protocol 1.0.0 copy "freedome_protocol: ^1.0.0" to clipboard
freedome_protocol: ^1.0.0 copied to clipboard

Freedome protocol models generated from freedome_contract (pure Dart, no I/O).

example/freedome_protocol_example.dart

// Decoding an API v1 body, a realtime event and a `.dome` manifest with freedome_protocol. NativeMindNONC.
import 'dart:convert';
import 'dart:io';

import 'package:freedome_protocol/freedome_protocol.dart';

void main() {
  // A REST body (GET /api/v1/venues/default/players/main).
  final player = PlayerState.fromJson(
    jsonDecode('{"id":"main","status":"playing","position":12.5,"x-vendor":1}')
        as Map<String, Object?>,
  );
  // Unknown members survive a round-trip.
  assert(player.toJson()['x-vendor'] == 1);

  // A realtime event (plain WS / socket.io / GraphQL envelope, 02e §7.1).
  final event = FreedomeEvent.fromJson({
    'type': 'event',
    'id': '0192f3a4-5b6c-7d8e-9f01-23456789abcd',
    'ts': '2026-10-19T12:00:00.123Z',
    'topic': DomeTopics.player('default'),
    'data': {
      'seq': 1,
      'kind': EventKinds.playerState,
      'resource': player.toJson(),
    },
  });
  switch (typedEvent(event)) {
    case PlaybackChanged(:final state?):
      _out('player ${state.id}: ${state.status.value} at ${state.position} s');
    default:
      _out('other event ${event.kind}');
  }

  // The operation table: method, path and scope of every operationId.
  final op = Operations.play;
  _out(
    '${op.method} /api/v1${op.expand({'venueId': 'default', 'playerId': 'main'})} needs ${op.scope}',
  );
}

void _out(String line) => stdout.writeln(line);
0
likes
150
points
--
downloads

Documentation

API reference

Publisher

unverified uploader

Freedome protocol models generated from freedome_contract (pure Dart, no I/O).

Homepage
Repository (GitLab)

License

unknown (license)

Dependencies

collection, meta

More

Packages that depend on freedome_protocol