generate method
Generates necessary code for a SteamEnum
Implementation
void generate({
required IOSink fileSink,
}) {
values.sort((a, b) => a.value.compareTo(b.value));
String firstKey = values.first.name;
int indexOfCommonPartEnd = 0;
chars:
for (; indexOfCommonPartEnd < firstKey.length; ++indexOfCommonPartEnd) {
String char = firstKey[indexOfCommonPartEnd];
for (SteamEnumValue enumValue in values.skip(1)) {
if (char != enumValue.name[indexOfCommonPartEnd]) {
break chars;
}
}
}
String correctedName = name.clearSteamNaming();
fileSink.writeln(
"// ignore_for_file: public_member_api_docs, always_specify_types, avoid_positional_boolean_parameters, avoid_classes_with_only_static_members, unreachable_switch_case",
);
fileSink.writeImport(packageName: "dart:ffi");
fileSink.writeImport(
packageName: "../unknown_enum_value_exception.dart",
);
fileSink.writeTypedef(
alias: "${correctedName}AliasDart",
of: "int",
);
fileSink.writeTypedef(
alias: "${correctedName}AliasC",
of: "Int32",
);
fileSink.writeEnum(
enumName: correctedName,
);
fileSink.writeStartBlock();
for (SteamEnumValue enumValue
in values.where((val) => !val.name.contains("Force32Bit"))) {
enumValue.generate(
fileSink: fileSink,
enumName: correctedName,
nameIndex: indexOfCommonPartEnd,
);
}
fileSink.writeln(";");
fileSink.writeln("final int value;\n");
fileSink.writeln("const $correctedName(this.value);\n");
fileSink.write("factory $correctedName.fromValue(int value)");
fileSink.writeStartBlock();
fileSink.write("switch (value)");
fileSink.writeStartBlock();
for (SteamEnumValue enumValue
in values.where((val) => !val.name.contains("Force32Bit"))) {
enumValue.generateSwitch(
fileSink: fileSink,
enumName: correctedName,
nameIndex: indexOfCommonPartEnd,
);
}
fileSink.write(
"default: throw UnknownEnumValueException(\"Unknown value for '$correctedName'. The value was: '\$value'\");",
);
fileSink.writeEndBlock();
fileSink.writeEndBlock();
fileSink.writeEndBlock();
}