generate method
This is entrypoint for code generation. Generates code according to the SteamApi definition by traversing all fields and emitting necessary code
Implementation
Future<void> generate({
required String path,
required String target,
}) async {
List<SteamStruct> missingStructs = [
SteamStruct(name: "SteamDatagramRelayAuthTicket"),
SteamStruct(
name: "CallbackMsg_t",
fields: [
SteamField(
name: "m_hSteamUser",
type: "HSteamUser",
),
SteamField(
name: "m_iCallback",
type: "int",
),
SteamField(
name: "m_pubParam",
type: "uint8 *",
),
SteamField(
name: "m_cubParam",
type: "int",
),
],
),
SteamStruct(
name: "AnalogAction_t",
fields: [
SteamField(
name: "actionHandle",
type: "InputAnalogActionHandle_t",
),
SteamField(
name: "analogActionData",
type: "InputAnalogActionData_t",
),
],
),
];
List<SteamInterface> missingInterfaces = [
SteamInterface(name: "ISteamNetworkingConnectionSignaling"),
SteamInterface(name: "ISteamNetworkingSignalingRecvContext"),
];
Set<String> enumSet = enums.map((e) => e.name).toSet();
enumSet.addAll(structs.expand((s) => s.enums.map((e) => e.name)));
enumSet.addAll(callbackStructs.expand((cs) => cs.enums.map((e) => e.name)));
enumSet.addAll(interfaces.expand((i) => i.enums.map((e) => e.name)));
Set<String> structSet = structs.map((s) => s.name).toSet()
..addAll(missingStructs.map((s) => s.name));
Set<String> callbackStructSet =
callbackStructs.map((cs) => cs.name).toSet();
Set<String> interfaceSet = interfaces.map((i) => i.name).toSet()
..addAll(missingInterfaces.map((i) => i.name));
String exportFilePath = p.join(path, "generated.dart");
File file = File(exportFilePath);
await file.create(recursive: true);
IOSink exportSink = file.openWrite(mode: FileMode.writeOnly);
await generateCallbackIdMap(
path: path,
exportSink: exportSink,
callbackStructSet: callbackStructSet,
);
await generateDl(
path: path,
);
await generateSteamApi(
path: path,
exportSink: exportSink,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
);
await generateSteamGameServer(
path: path,
exportSink: exportSink,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
);
await generateDispatch(
path: path,
exportSink: exportSink,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
);
await generateUnknownEnumValueException(
path: path,
exportSink: exportSink,
);
await consts.generateFile(
path: path,
exportSink: exportSink,
);
await typedefs.generateFile(
path: path,
exportSink: exportSink,
);
await enums.generateFile(
path: path,
exportSink: exportSink,
);
await missingStructs.generateFile(
path: path,
exportSink: exportSink,
target: target,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
);
await structs.generateFile(
path: path,
exportSink: exportSink,
target: target,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
);
await callbackStructs.generateFile(
path: path,
exportSink: exportSink,
target: target,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
);
await missingInterfaces.generateFile(
path: path,
exportSink: exportSink,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
interfaceSet: interfaceSet,
);
await interfaces.generateFile(
path: path,
exportSink: exportSink,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
interfaceSet: interfaceSet,
);
await exportSink.flush();
await exportSink.close();
}