json_rpc_codegen_builder 2.1.0 copy "json_rpc_codegen_builder: ^2.1.0" to clipboard
json_rpc_codegen_builder: ^2.1.0 copied to clipboard

A dart code generator that generates typed client and server code for the json_rpc_2 package.

example/json_rpc_codegen_builder_example.dart

// ignore_for_file: unreachable_from_main for testing

import 'package:json_rpc_codegen/json_rpc_codegen.dart';

part 'json_rpc_codegen_builder_example.g.dart';

enum Permission { read, write, administrate }

enum Stage { all, pre, post }

class User {
  final String firstName;
  final String lastName;

  const User(this.firstName, this.lastName);

  factory User.fromJson(Map<String, dynamic> json) =>
      throw UnimplementedError(json.toString());
}

@jsonRpc
abstract interface class SampleApi {
  void hello(String name, [int times = 5, double? interval, int delay = 100]);

  @clientDefaults
  void notify({required int id, List<double> measures = const [1, 2]});

  Future<String> echo(String message);

  Future<User?> createUser(Map<String, Set<Permission>?> permissions);

  Future<List<List<User>?>> userMatrix([Permission? permission]);

  Future<Map<String, List<Permission>>> permissions();

  Future<void> setHomepage({required Uri url, DateTime? timestamp});

  Future<Uri> findForDates(Iterable<DateTime> times);

  @clientDefaults
  void log(
    String message,
    dynamic context, [
    User user = const User('admin', 'admin'),
  ]);

  Future<bool> validate({
    User user = const .new('admin', 'admin'),
    required User? authorizeFor,
    Permission permission = .administrate,
    List<Uri>? resources = const <Uri>[],
  });

  // ignore: strict_raw_type to test type defaults
  Future<Map> merge(Set keys, Iterable values);

  Future<(int, List<User>?, Permission, ({int x, int y}))> flip(
    ({int am, List<User>? ul, Permission pm, (int, int) pt}) record,
    () control,
  );

  void startServerTask({
    required int id,
    required String taskName,
    bool verbose = false,
    double? scale,
  });

  @clientDefaults
  Future<double> getProgress(int id, [Stage stage = .all]);

  Stream<User> streamUsers(
    Permission permission, [
    int limit = 10,
    int offset = 0,
  ]);

  @RpcMethod(name: 'user.rename')
  Future<void> renameUser({
    @RpcParam(name: 'user-id') required int id,
    @RpcParam(name: 'new-name') required String name,
  });

  // custom conversion via a constructor tear off and top level functions
  @RpcMethod(name: 'user.load', fromJson: User.fromJson, toJson: userToJson)
  Future<User> loadUser(
    @RpcParam(fromJson: stageFromCode, toJson: stageToCode) Stage stage, [
    @RpcParam(fromJson: permissionsFromMask, toJson: permissionsToMask)
    Set<Permission> permissions = const <Permission>{},
  ]);

  @RpcMethod(fromJson: User.fromJson, toJson: userToJson)
  Stream<User> streamAdmins({
    @RpcParam(name: 'min-level', fromJson: stageFromCode, toJson: stageToCode)
    Stage stage = .all,
  });
}

Map<String, dynamic> userToJson(User user) => {
  'firstName': user.firstName,
  'lastName': user.lastName,
};

int stageToCode(Stage stage) => stage.index;

Stage stageFromCode(int code) => Stage.values[code];

int permissionsToMask(Set<Permission> permissions) =>
    permissions.fold(0, (mask, permission) => mask | (1 << permission.index));

Set<Permission> permissionsFromMask(int mask) => Permission.values
    .where((permission) => mask & (1 << permission.index) != 0)
    .toSet();

void main() {}
2
likes
160
points
266
downloads

Documentation

API reference

Publisher

verified publisherskycoder42.de

Weekly Downloads

A dart code generator that generates typed client and server code for the json_rpc_2 package.

Homepage
Repository (GitHub)
View/report issues

License

BSD-3-Clause (license)

Dependencies

analyzer, build, build_config, code_builder, collection, dart_test_tools, json_rpc_codegen, meta, source_gen, source_helper

More

Packages that depend on json_rpc_codegen_builder