diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java index 0f2dac9c89f5a54a6c98f957e133116284320c11..e231fc54ccceb5c1f87f3c4220ae3b1125a20326 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioNextClientCodegen.java @@ -17,9 +17,12 @@ package org.openapitools.codegen.languages; import com.google.common.collect.Sets; +import com.samskivert.mustache.Mustache; +import com.samskivert.mustache.Template; import io.swagger.v3.oas.models.media.Schema; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; +import org.openapitools.codegen.api.TemplatePathLocator; import org.openapitools.codegen.config.GlobalSettings; import org.openapitools.codegen.meta.GeneratorMetadata; import org.openapitools.codegen.meta.Stability; @@ -28,6 +31,10 @@ import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; import org.openapitools.codegen.model.OperationsMap; +import org.openapitools.codegen.templating.CommonTemplateContentLocator; +import org.openapitools.codegen.templating.GeneratorTemplateContentLocator; +import org.openapitools.codegen.templating.MustacheEngineAdapter; +import org.openapitools.codegen.templating.TemplateManagerOptions; import org.openapitools.codegen.utils.ModelUtils; import org.openapitools.codegen.utils.ProcessUtils; import org.slf4j.Logger; @@ -58,6 +65,8 @@ public class DartDioNextClientCodegen extends AbstractDartCodegen { private String clientName; + private TemplateManager templateManager; + public DartDioNextClientCodegen() { super(); @@ -178,6 +187,28 @@ public class DartDioNextClientCodegen extends AbstractDartCodegen { configureSerializationLibraryBuiltValue(srcFolder); break; } + + TemplateManagerOptions templateManagerOptions = new TemplateManagerOptions(isEnableMinimalUpdate(), isSkipOverwrite()); + TemplatePathLocator commonTemplateLocator = new CommonTemplateContentLocator(); + TemplatePathLocator generatorTemplateLocator = new GeneratorTemplateContentLocator(this); + templateManager = new TemplateManager( + templateManagerOptions, + getTemplatingEngine(), + new TemplatePathLocator[]{generatorTemplateLocator, commonTemplateLocator} + ); + + // A lambda which allows for easy includes of serialization library specific + // templates without having to change the main template files. + additionalProperties.put("includeLibraryTemplate", (Mustache.Lambda) (fragment, writer) -> { + MustacheEngineAdapter engine = ((MustacheEngineAdapter) getTemplatingEngine()); + String templateFile = "serialization/" + library + "/" + fragment.execute() + ".mustache"; + Template tmpl = engine.getCompiler() + .withLoader(name -> engine.findTemplate(templateManager, name)) + .defaultValue("") + .compile(templateManager.getFullTemplateContents(templateFile)); + + fragment.executeTemplate(tmpl, writer); + }); } private void configureSerializationLibraryBuiltValue(String srcFolder) { diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache index 01663cfd23c2795650376e30a6342642d3369a22..892cbafd469449907e1c8d5048b9b8a0af9d558d 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/api.mustache @@ -1,7 +1,7 @@ {{>header}} import 'dart:async'; -{{#useBuiltValue}}import 'package:built_value/serializer.dart';{{/useBuiltValue}} +{{#includeLibraryTemplate}}api/imports{{/includeLibraryTemplate}} import 'package:dio/dio.dart'; {{#operations}} @@ -11,12 +11,8 @@ import 'package:dio/dio.dart'; class {{classname}} { final Dio _dio; - {{#useBuiltValue}} - final Serializers _serializers; - - {{/useBuiltValue}} - const {{classname}}(this._dio{{#useBuiltValue}}, this._serializers{{/useBuiltValue}}); +{{#includeLibraryTemplate}}api/constructor{{/includeLibraryTemplate}} {{#operation}} /// {{summary}}{{^summary}}{{nickname}}{{/summary}} @@ -88,14 +84,14 @@ class {{classname}} { final _queryParameters = <String, dynamic>{ {{#queryParams}} - {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{baseName}}': {{#useBuiltValue}}{{>serialization/built_value/query_param}}{{/useBuiltValue}}, + {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{baseName}}': {{#includeLibraryTemplate}}api/query_param{{/includeLibraryTemplate}}, {{/queryParams}} };{{/hasQueryParams}}{{#hasBodyOrFormParams}} dynamic _bodyData; try { -{{#useBuiltValue}}{{>serialization/built_value/serialize}}{{/useBuiltValue}} +{{#includeLibraryTemplate}}api/serialize{{/includeLibraryTemplate}} } catch(error, stackTrace) { throw DioError( requestOptions: _options.compose( @@ -122,7 +118,7 @@ class {{classname}} { {{{returnType}}} _responseData; try { -{{#useBuiltValue}}{{>serialization/built_value/deserialize}}{{/useBuiltValue}} +{{#includeLibraryTemplate}}api/deserialize{{/includeLibraryTemplate}} } catch (error, stackTrace) { throw DioError( requestOptions: _response.requestOptions, diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/class.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/class.mustache index da5ecb735258f8e38fef70eecc1b2e2d9e319eef..228fcf5826d1db748309416cc330836c0264d5fc 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/class.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/class.mustache @@ -1 +1 @@ -{{#useBuiltValue}}{{>serialization/built_value/class}}{{/useBuiltValue}} \ No newline at end of file +{{#includeLibraryTemplate}}class{{/includeLibraryTemplate}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/enum.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/enum.mustache index 6c20417e35634d6060adbf3b16bb8dac235df00d..a47e780c2b57ef37a5fd0c10c8143fc7ccd5be06 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/enum.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/enum.mustache @@ -1 +1 @@ -{{#useBuiltValue}}{{>serialization/built_value/enum}}{{/useBuiltValue}} \ No newline at end of file +{{#includeLibraryTemplate}}enum{{/includeLibraryTemplate}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/constructor.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/constructor.mustache new file mode 100644 index 0000000000000000000000000000000000000000..e823414cc755a37c15e7089d1ad3c1e7b0375956 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/constructor.mustache @@ -0,0 +1,3 @@ + final Serializers _serializers; + + const {{classname}}(this._dio, this._serializers); \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/deserialize.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/deserialize.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/deserialize.mustache rename to modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/deserialize.mustache diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/imports.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/imports.mustache new file mode 100644 index 0000000000000000000000000000000000000000..2f62fbda42679c55ada15c385bfd209170c162d5 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/imports.mustache @@ -0,0 +1 @@ +import 'package:built_value/serializer.dart'; \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/query_param.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/query_param.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/query_param.mustache rename to modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/query_param.mustache diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/serialize.mustache similarity index 97% rename from modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache rename to modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/serialize.mustache index 54d8e99c7579928136b481b1936060ad286fc41a..6c4d370d86e94f0fc1e5e995f66ef5402d24947b 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/serialize.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/api/serialize.mustache @@ -9,7 +9,7 @@ {{^isMultipart}} _bodyData = <String, dynamic>{ {{#formParams}} - {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{{baseName}}}': {{>serialization/built_value/query_param}}, + {{^required}}{{^isNullable}}if ({{{paramName}}} != null) {{/isNullable}}{{/required}}r'{{{baseName}}}': {{>serialization/built_value/api/query_param}}, {{/formParams}} }; {{/isMultipart}} @@ -27,4 +27,4 @@ {{/isContainer}} _bodyData = {{^required}}{{paramName}} == null ? null : {{/required}}_serializers.serialize({{paramName}}, specifiedType: _type); {{/isPrimitiveType}} - {{/bodyParam}} \ No newline at end of file + {{/bodyParam}}