generateCallbackIdMap method

Future<void> generateCallbackIdMap({
  1. required String path,
  2. required IOSink exportSink,
  3. Set<String> callbackStructSet = const {},
})

Generates callback id map by type to make it easier to lookup callback ids

Implementation

Future<void> generateCallbackIdMap({
  required String path,
  required IOSink exportSink,
  Set<String> callbackStructSet = const {},
}) async {
  String filePath = p.join(path, "callback_id_map.dart");
  exportSink.writeExport(
    path: "callback_id_map.dart",
  );

  File file = File(filePath);
  await file.create(recursive: true);

  IOSink fileSink = file.openWrite(mode: FileMode.writeOnly);
  fileSink.writeln(
    "// ignore_for_file: public_member_api_docs, always_specify_types, avoid_positional_boolean_parameters, avoid_classes_with_only_static_members",
  );

  for (String name in callbackStructs.map((cs) => cs.name)) {
    String importPath = name.importPath(
      relativeness: "",
      callbackStructSet: callbackStructSet,
    );

    if (importPath.isNotEmpty) {
      fileSink.writeImport(packageName: importPath);
    }
  }

  fileSink.write(
    "Map<Type, int> callbackIdMapByType =",
  );

  fileSink.writeStartBlock();

  for (String name in callbackStructs.map((cs) => cs.name)) {
    String typeName = name.clearSteamNaming().pascalCase;
    fileSink.write("$typeName: $typeName.callbackId,");
  }

  fileSink.writeEndBlock();

  fileSink.write(";");

  await fileSink.flush();
  await fileSink.close();
}