[dart-dio] Generate the correct serializers (#8357)

* only generate actually used serializers (anything used in body or response)
* generate previously missing serializers for collection types
* improve formatting
This commit is contained in:
Peter Leibiger 2021-01-07 15:28:37 +01:00 committed by GitHub
parent 3b6c2b2342
commit c43234711a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 139 additions and 264 deletions

View File

@ -289,6 +289,7 @@ public class DartDioClientCodegen extends DartClientCodegen {
Map<String, Object> operations = (Map<String, Object>) objs.get("operations");
List<CodegenOperation> operationList = (List<CodegenOperation>) operations.get("operation");
Set<Map<String, Object>> serializers = new HashSet<>();
Set<String> modelImports = new HashSet<>();
Set<String> fullImports = new HashSet<>();
@ -314,6 +315,13 @@ public class DartDioClientCodegen extends DartClientCodegen {
param.baseType = "MultipartFile";
param.dataType = "MultipartFile";
}
if (param.isContainer) {
final Map<String, Object> serializer = new HashMap<>();
serializer.put("isArray", param.isArray);
serializer.put("isMap", param.isMap);
serializer.put("baseType", param.baseType);
serializers.add(serializer);
}
}
op.vendorExtensions.put("x-is-json", isJson);
@ -336,10 +344,19 @@ public class DartDioClientCodegen extends DartClientCodegen {
}
modelImports.addAll(imports);
op.imports = imports;
if (op.returnContainer != null) {
final Map<String, Object> serializer = new HashMap<>();
serializer.put("isArray", Objects.equals("array", op.returnContainer));
serializer.put("isMap", Objects.equals("map", op.returnContainer));
serializer.put("baseType", op.returnBaseType);
serializers.add(serializer);
}
}
objs.put("modelImports", modelImports);
objs.put("fullImports", fullImports);
objs.put("serializers", serializers);
return objs;
}

View File

@ -10,25 +10,26 @@ import 'package:built_value/standard_json_plugin.dart';
import 'package:{{pubName}}/local_date_serializer.dart';{{/timeMachine}}
{{#models}}{{#model}}import 'package:{{pubName}}/model/{{classFilename}}.dart';
{{/model}}{{/models}}
part 'serializers.g.dart';
@SerializersFor(const [
{{#models}}{{#model}}{{classname}},
{{/model}}{{/models}}
@SerializersFor(const [{{#models}}{{#model}}
{{classname}},{{/model}}{{/models}}
])
//allow all models to be serialized within a list
Serializers serializers = (_$serializers.toBuilder()
{{#models}}{{#model}}..addBuilderFactory(
const FullType(BuiltList, const [const FullType({{classname}})]),
() => new ListBuilder<{{classname}}>())
{{/model}}{{/models}}
..add(Iso8601DateTimeSerializer())
).build();
Serializers serializers = (_$serializers.toBuilder(){{#apiInfo}}{{#apis}}{{#serializers}}
..addBuilderFactory(
{{#isArray}}
const FullType(BuiltList, [FullType({{baseType}})]),
() => ListBuilder<{{baseType}}>(),
{{/isArray}}
{{#isMap}}
const FullType(BuiltMap, [FullType(String), FullType({{baseType}})]),
() => MapBuilder<String, {{baseType}}>(),
{{/isMap}}
){{/serializers}}{{/apis}}{{/apiInfo}}{{#timeMachine}}
..add(OffsetDateSerializer())
..add(OffsetDateTimeSerializer()){{/timeMachine}}
..add(Iso8601DateTimeSerializer()))
.build();
Serializers standardSerializers =
(serializers.toBuilder()
{{#timeMachine}}..add(OffsetDateSerializer())
..add(OffsetDateTimeSerializer())
{{/timeMachine}}..addPlugin(StandardJsonPlugin())).build();
(serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

View File

@ -20,7 +20,6 @@ import 'package:openapi/model/pet.dart';
import 'package:openapi/model/tag.dart';
import 'package:openapi/model/user.dart';
part 'serializers.g.dart';
@SerializersFor(const [
@ -30,33 +29,22 @@ Order,
Pet,
Tag,
User,
])
//allow all models to be serialized within a list
Serializers serializers = (_$serializers.toBuilder()
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ApiResponse)]),
() => new ListBuilder<ApiResponse>())
const FullType(BuiltList, [FullType(Pet)]),
() => ListBuilder<Pet>(),
)
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Category)]),
() => new ListBuilder<Category>())
const FullType(BuiltMap, [FullType(String), FullType(int)]),
() => MapBuilder<String, int>(),
)
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Order)]),
() => new ListBuilder<Order>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Pet)]),
() => new ListBuilder<Pet>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Tag)]),
() => new ListBuilder<Tag>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(User)]),
() => new ListBuilder<User>())
..add(Iso8601DateTimeSerializer())
).build();
const FullType(BuiltList, [FullType(User)]),
() => ListBuilder<User>(),
)
..add(Iso8601DateTimeSerializer()))
.build();
Serializers standardSerializers =
(serializers.toBuilder()
..addPlugin(StandardJsonPlugin())).build();
(serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

View File

@ -20,7 +20,6 @@ import 'package:openapi/model/pet.dart';
import 'package:openapi/model/tag.dart';
import 'package:openapi/model/user.dart';
part 'serializers.g.dart';
@SerializersFor(const [
@ -30,33 +29,22 @@ Order,
Pet,
Tag,
User,
])
//allow all models to be serialized within a list
Serializers serializers = (_$serializers.toBuilder()
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ApiResponse)]),
() => new ListBuilder<ApiResponse>())
const FullType(BuiltList, [FullType(Pet)]),
() => ListBuilder<Pet>(),
)
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Category)]),
() => new ListBuilder<Category>())
const FullType(BuiltMap, [FullType(String), FullType(int)]),
() => MapBuilder<String, int>(),
)
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Order)]),
() => new ListBuilder<Order>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Pet)]),
() => new ListBuilder<Pet>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Tag)]),
() => new ListBuilder<Tag>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(User)]),
() => new ListBuilder<User>())
..add(Iso8601DateTimeSerializer())
).build();
const FullType(BuiltList, [FullType(User)]),
() => ListBuilder<User>(),
)
..add(Iso8601DateTimeSerializer()))
.build();
Serializers standardSerializers =
(serializers.toBuilder()
..addPlugin(StandardJsonPlugin())).build();
(serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

View File

@ -57,7 +57,6 @@ import 'package:openapi/model/special_model_name.dart';
import 'package:openapi/model/tag.dart';
import 'package:openapi/model/user.dart';
part 'serializers.g.dart';
@SerializersFor(const [
@ -104,144 +103,26 @@ ReadOnlyFirst,
SpecialModelName,
Tag,
User,
])
//allow all models to be serialized within a list
Serializers serializers = (_$serializers.toBuilder()
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(AdditionalPropertiesClass)]),
() => new ListBuilder<AdditionalPropertiesClass>())
const FullType(BuiltMap, [FullType(String), FullType(String)]),
() => MapBuilder<String, String>(),
)
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Animal)]),
() => new ListBuilder<Animal>())
const FullType(BuiltList, [FullType(Pet)]),
() => ListBuilder<Pet>(),
)
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ApiResponse)]),
() => new ListBuilder<ApiResponse>())
const FullType(BuiltMap, [FullType(String), FullType(int)]),
() => MapBuilder<String, int>(),
)
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ArrayOfArrayOfNumberOnly)]),
() => new ListBuilder<ArrayOfArrayOfNumberOnly>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ArrayOfNumberOnly)]),
() => new ListBuilder<ArrayOfNumberOnly>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ArrayTest)]),
() => new ListBuilder<ArrayTest>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Capitalization)]),
() => new ListBuilder<Capitalization>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Cat)]),
() => new ListBuilder<Cat>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(CatAllOf)]),
() => new ListBuilder<CatAllOf>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Category)]),
() => new ListBuilder<Category>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ClassModel)]),
() => new ListBuilder<ClassModel>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Dog)]),
() => new ListBuilder<Dog>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(DogAllOf)]),
() => new ListBuilder<DogAllOf>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(EnumArrays)]),
() => new ListBuilder<EnumArrays>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(EnumTest)]),
() => new ListBuilder<EnumTest>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(FileSchemaTestClass)]),
() => new ListBuilder<FileSchemaTestClass>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Foo)]),
() => new ListBuilder<Foo>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(FormatTest)]),
() => new ListBuilder<FormatTest>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(HasOnlyReadOnly)]),
() => new ListBuilder<HasOnlyReadOnly>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(HealthCheckResult)]),
() => new ListBuilder<HealthCheckResult>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(InlineResponseDefault)]),
() => new ListBuilder<InlineResponseDefault>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(MapTest)]),
() => new ListBuilder<MapTest>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(MixedPropertiesAndAdditionalPropertiesClass)]),
() => new ListBuilder<MixedPropertiesAndAdditionalPropertiesClass>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Model200Response)]),
() => new ListBuilder<Model200Response>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ModelClient)]),
() => new ListBuilder<ModelClient>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ModelEnumClass)]),
() => new ListBuilder<ModelEnumClass>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ModelFile)]),
() => new ListBuilder<ModelFile>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ModelList)]),
() => new ListBuilder<ModelList>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ModelReturn)]),
() => new ListBuilder<ModelReturn>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Name)]),
() => new ListBuilder<Name>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(NullableClass)]),
() => new ListBuilder<NullableClass>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(NumberOnly)]),
() => new ListBuilder<NumberOnly>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Order)]),
() => new ListBuilder<Order>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(OuterComposite)]),
() => new ListBuilder<OuterComposite>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(OuterEnum)]),
() => new ListBuilder<OuterEnum>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(OuterEnumDefaultValue)]),
() => new ListBuilder<OuterEnumDefaultValue>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(OuterEnumInteger)]),
() => new ListBuilder<OuterEnumInteger>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(OuterEnumIntegerDefaultValue)]),
() => new ListBuilder<OuterEnumIntegerDefaultValue>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Pet)]),
() => new ListBuilder<Pet>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(ReadOnlyFirst)]),
() => new ListBuilder<ReadOnlyFirst>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(SpecialModelName)]),
() => new ListBuilder<SpecialModelName>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(Tag)]),
() => new ListBuilder<Tag>())
..addBuilderFactory(
const FullType(BuiltList, const [const FullType(User)]),
() => new ListBuilder<User>())
..add(Iso8601DateTimeSerializer())
).build();
const FullType(BuiltList, [FullType(User)]),
() => ListBuilder<User>(),
)
..add(Iso8601DateTimeSerializer()))
.build();
Serializers standardSerializers =
(serializers.toBuilder()
..addPlugin(StandardJsonPlugin())).build();
(serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();