generate method
void
generate({})
Generates necessary code for a SteamStruct
Implementation
void generate({
required IOSink fileSink,
required String target,
Set<String> enumSet = const {},
Set<String> structSet = const {},
Set<String> callbackStructSet = const {},
}) {
fileSink.writeln(
"// ignore_for_file: public_member_api_docs, always_specify_types, avoid_positional_boolean_parameters, avoid_classes_with_only_static_members",
);
fileSink.writeImport(packageName: "dart:ffi");
fileSink.writeImport(packageName: "package:ffi/ffi.dart");
fields.generateImport(
fileSink: fileSink,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
);
methods.generateImport(
fileSink: fileSink,
enumSet: enumSet,
structSet: structSet,
callbackStructSet: callbackStructSet,
);
fileSink.writeImport(
packageName: "../dl.dart",
);
fileSink.writeImport(
packageName: "../typedefs.dart",
);
String correctedName = name.clearSteamNaming().pascalCase;
fileSink.write("@Packed(${_getAlignment(target: target)})");
fileSink.writeClass(
className: correctedName,
extend: fields.isNotEmpty ? "Struct" : "Opaque",
isFinal: true,
);
fileSink.writeStartBlock();
// write callback id before everything
if (callbackId != -1) {
fileSink.writeln("static int get callbackId => $callbackId;\n");
}
consts.generate(
fileSink: fileSink,
);
fields.generate(
fileSink: fileSink,
);
fileSink.writeEndBlock();
if (methods.isNotEmpty || fields.isNotEmpty) {
methods.generateLookup(
fileSink: fileSink,
owner: correctedName,
);
fileSink.writeExtension(
extensionName: "${correctedName}Extensions",
on: "Pointer<$correctedName>",
);
fileSink.writeStartBlock();
methods.generate(
fileSink: fileSink,
owner: correctedName,
);
fields.generateFieldAccess(
fileSink: fileSink,
);
fileSink.writeEndBlock();
}
}