loadBindings method

Future<void> loadBindings(
  1. Compiler compiler,
  2. String name
)

Implementation

Future<void> loadBindings(Compiler compiler, String name) async {
  final packagePath = 'package:every_door_plugin/bindings/${name}_eval.json';
  final packageUri = await Isolate.resolvePackageUri(Uri.parse(packagePath));
  if (packageUri == null) {
    throw FileSystemException("Cannot find $packagePath");
  }
  final contents = await File(p.fromUri(packageUri)).readAsString();
  final data = json.decode(contents) as Map<String, dynamic>;

  for (final $class in (data['classes'] as List).cast<Map>()) {
    compiler.defineBridgeClass(BridgeClassDef.fromJson($class.cast()));
  }
  for (final $enum in (data['enums'] as List).cast<Map>()) {
    compiler.defineBridgeEnum(BridgeEnumDef.fromJson($enum.cast()));
  }
  for (final $source in (data['sources'] as List).cast<Map>()) {
    compiler.addSource(DartSource($source['uri'], $source['source']));
  }
  for (final $function in (data['functions'] as List).cast<Map>()) {
    compiler.defineBridgeTopLevelFunction(
      BridgeFunctionDeclaration.fromJson($function.cast()),
    );
  }
}