diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java index 3f1b69ad669..582402c2251 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java @@ -289,6 +289,7 @@ public class DartDioClientCodegen extends DartClientCodegen { Map operations = (Map) objs.get("operations"); List operationList = (List) operations.get("operation"); + Set> serializers = new HashSet<>(); Set modelImports = new HashSet<>(); Set fullImports = new HashSet<>(); @@ -314,6 +315,13 @@ public class DartDioClientCodegen extends DartClientCodegen { param.baseType = "MultipartFile"; param.dataType = "MultipartFile"; } + if (param.isContainer) { + final Map 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 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; } diff --git a/modules/openapi-generator/src/main/resources/dart-dio/serializers.mustache b/modules/openapi-generator/src/main/resources/dart-dio/serializers.mustache index df9945195c6..eb73bd7453a 100644 --- a/modules/openapi-generator/src/main/resources/dart-dio/serializers.mustache +++ b/modules/openapi-generator/src/main/resources/dart-dio/serializers.mustache @@ -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(), +{{/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(); diff --git a/samples/client/petstore/dart-dio/petstore_client_lib/lib/serializers.dart b/samples/client/petstore/dart-dio/petstore_client_lib/lib/serializers.dart index f90fdd7603a..b3c6cf6e1f1 100644 --- a/samples/client/petstore/dart-dio/petstore_client_lib/lib/serializers.dart +++ b/samples/client/petstore/dart-dio/petstore_client_lib/lib/serializers.dart @@ -20,43 +20,31 @@ import 'package:openapi/model/pet.dart'; import 'package:openapi/model/tag.dart'; import 'package:openapi/model/user.dart'; - part 'serializers.g.dart'; @SerializersFor(const [ -ApiResponse, -Category, -Order, -Pet, -Tag, -User, - + ApiResponse, + Category, + 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()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Category)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Order)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Pet)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Tag)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(User)]), -() => new ListBuilder()) - -..add(Iso8601DateTimeSerializer()) -).build(); + ..addBuilderFactory( + const FullType(BuiltList, [FullType(Pet)]), + () => ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, [FullType(String), FullType(int)]), + () => MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltList, [FullType(User)]), + () => ListBuilder(), + ) + ..add(Iso8601DateTimeSerializer())) + .build(); Serializers standardSerializers = -(serializers.toBuilder() -..addPlugin(StandardJsonPlugin())).build(); + (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build(); diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/serializers.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/serializers.dart index f90fdd7603a..b3c6cf6e1f1 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/serializers.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib/lib/serializers.dart @@ -20,43 +20,31 @@ import 'package:openapi/model/pet.dart'; import 'package:openapi/model/tag.dart'; import 'package:openapi/model/user.dart'; - part 'serializers.g.dart'; @SerializersFor(const [ -ApiResponse, -Category, -Order, -Pet, -Tag, -User, - + ApiResponse, + Category, + 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()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Category)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Order)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Pet)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Tag)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(User)]), -() => new ListBuilder()) - -..add(Iso8601DateTimeSerializer()) -).build(); + ..addBuilderFactory( + const FullType(BuiltList, [FullType(Pet)]), + () => ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, [FullType(String), FullType(int)]), + () => MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltList, [FullType(User)]), + () => ListBuilder(), + ) + ..add(Iso8601DateTimeSerializer())) + .build(); Serializers standardSerializers = -(serializers.toBuilder() -..addPlugin(StandardJsonPlugin())).build(); + (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build(); diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/serializers.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/serializers.dart index 6b0592d7f9e..93a24c5a7d2 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/serializers.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake/lib/serializers.dart @@ -57,191 +57,72 @@ 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 [ -AdditionalPropertiesClass, -Animal, -ApiResponse, -ArrayOfArrayOfNumberOnly, -ArrayOfNumberOnly, -ArrayTest, -Capitalization, -Cat, -CatAllOf, -Category, -ClassModel, -Dog, -DogAllOf, -EnumArrays, -EnumTest, -FileSchemaTestClass, -Foo, -FormatTest, -HasOnlyReadOnly, -HealthCheckResult, -InlineResponseDefault, -MapTest, -MixedPropertiesAndAdditionalPropertiesClass, -Model200Response, -ModelClient, -ModelEnumClass, -ModelFile, -ModelList, -ModelReturn, -Name, -NullableClass, -NumberOnly, -Order, -OuterComposite, -OuterEnum, -OuterEnumDefaultValue, -OuterEnumInteger, -OuterEnumIntegerDefaultValue, -Pet, -ReadOnlyFirst, -SpecialModelName, -Tag, -User, - + AdditionalPropertiesClass, + Animal, + ApiResponse, + ArrayOfArrayOfNumberOnly, + ArrayOfNumberOnly, + ArrayTest, + Capitalization, + Cat, + CatAllOf, + Category, + ClassModel, + Dog, + DogAllOf, + EnumArrays, + EnumTest, + FileSchemaTestClass, + Foo, + FormatTest, + HasOnlyReadOnly, + HealthCheckResult, + InlineResponseDefault, + MapTest, + MixedPropertiesAndAdditionalPropertiesClass, + Model200Response, + ModelClient, + ModelEnumClass, + ModelFile, + ModelList, + ModelReturn, + Name, + NullableClass, + NumberOnly, + Order, + OuterComposite, + OuterEnum, + OuterEnumDefaultValue, + OuterEnumInteger, + OuterEnumIntegerDefaultValue, + Pet, + 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()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Animal)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ApiResponse)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ArrayOfArrayOfNumberOnly)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ArrayOfNumberOnly)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ArrayTest)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Capitalization)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Cat)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(CatAllOf)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Category)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ClassModel)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Dog)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(DogAllOf)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(EnumArrays)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(EnumTest)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(FileSchemaTestClass)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Foo)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(FormatTest)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(HasOnlyReadOnly)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(HealthCheckResult)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(InlineResponseDefault)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(MapTest)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(MixedPropertiesAndAdditionalPropertiesClass)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Model200Response)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ModelClient)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ModelEnumClass)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ModelFile)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ModelList)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ModelReturn)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Name)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(NullableClass)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(NumberOnly)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Order)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(OuterComposite)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(OuterEnum)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(OuterEnumDefaultValue)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(OuterEnumInteger)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(OuterEnumIntegerDefaultValue)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Pet)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(ReadOnlyFirst)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(SpecialModelName)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(Tag)]), -() => new ListBuilder()) -..addBuilderFactory( -const FullType(BuiltList, const [const FullType(User)]), -() => new ListBuilder()) - -..add(Iso8601DateTimeSerializer()) -).build(); + ..addBuilderFactory( + const FullType(BuiltMap, [FullType(String), FullType(String)]), + () => MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltList, [FullType(Pet)]), + () => ListBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltMap, [FullType(String), FullType(int)]), + () => MapBuilder(), + ) + ..addBuilderFactory( + const FullType(BuiltList, [FullType(User)]), + () => ListBuilder(), + ) + ..add(Iso8601DateTimeSerializer())) + .build(); Serializers standardSerializers = -(serializers.toBuilder() -..addPlugin(StandardJsonPlugin())).build(); + (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();