generateApiCode function
Implementation
SimpleDartCode generateApiCode(IMap<String, GraphQLRootObject> apiMap) {
final objectTypeList = apiMap.values.expand(
(element) => _collectObjectType(element),
);
final groupedSetMap = objectTypeList.groupSetsBy((tuple) => tuple.$1);
final objectTypeMap = IMap.fromEntries(groupedSetMap.entries.map((entry) {
if (1 < entry.value.length) {
throw Exception(
'同じ型の名前なのに構造が違う ${entry.key} \n${entry.value.mapIndexed((index, tuple) => '\n$index:\n' + queryFieldListToStringLoop(tuple.$2, 1)).safeJoin('\n')}',
);
}
return MapEntry(entry.key, entry.value.first.$2);
}));
return SimpleDartCode(
importPackageAndFileNames: IList([
const ImportPackageFileNameAndAsName(
packageAndFileName:
'package:simple_graphql_client_gen/graphql_post.dart',
asName: 'graphql_post',
),
const ImportPackageFileNameAndAsName(
packageAndFileName: 'package:narumincho_json/narumincho_json.dart',
asName: 'narumincho_json',
),
const ImportPackageFileNameAndAsName(
packageAndFileName: './type.dart',
asName: 'type',
),
]),
declarationList: IList([
ClassDeclaration(
name: 'Api',
documentationComments: 'APIを呼ぶ',
fields: const IListConst([]),
modifier: ClassModifier.abstract,
methods: IList(
apiMap.mapTo(
(apiName, objectType) => _createApiCallMethod(
apiName,
objectType,
),
),
),
),
for (final objectType in objectTypeMap.values)
..._objectTypeClassDeclaration(
objectType,
IList(objectTypeMap.values),
)
]),
);
}