getTypesFromAbi function
Get types from abi
@param initialTypes Set of types to build on.
In most cases, it's best to fill this from a fresh call to getTypesFromAbi()
.
Implementation
Map<String?, Type> getTypesFromAbi(Map<String, Type> initialTypes, Abi abi) {
var types = Map.from(initialTypes).cast<String?, Type>();
if (abi.types != null) {
for (final item in abi.types!) {
types[item?.new_type_name] = createType(name: item?.new_type_name, aliasOfName: item?.type);
}
}
if (abi.structs != null) {
for (final str in abi.structs!) {
types[str!.name] = createType(
name: str.name,
baseName: str.base,
// ignore: avoid_redundant_argument_values
fields: str.fields?.map((item) => Field(name: item!.name!, typeName: item.type!, type: null)).toList(),
serialize: serializeStruct,
deserialize: deserializeStruct);
}
}
if (abi.variants != null) {
for (final v in abi.variants!) {
types[v!.name] = createType(
name: v.name,
// ignore: avoid_redundant_argument_values
fields: v.types?.map((s) => Field(name: s, typeName: s, type: null)).toList(),
serialize: serializeVariant,
deserialize: deserializeVariant,
);
}
}
types.forEach((name, type) {
if (type.baseName!.isNotEmpty) {
type.base = getType(types, type.baseName);
}
for (final field in type.fields!) {
field.type = getType(types, field.typeName);
}
});
return types;
}