mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-07-08 08:30:56 +00:00
[dart] Improved library specific template usage (#10742)
This commit is contained in:
parent
a34f992c95
commit
51c48510a4
@ -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) {
|
||||
|
@ -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,
|
||||
|
@ -1 +1 @@
|
||||
{{#useBuiltValue}}{{>serialization/built_value/class}}{{/useBuiltValue}}
|
||||
{{#includeLibraryTemplate}}class{{/includeLibraryTemplate}}
|
@ -1 +1 @@
|
||||
{{#useBuiltValue}}{{>serialization/built_value/enum}}{{/useBuiltValue}}
|
||||
{{#includeLibraryTemplate}}enum{{/includeLibraryTemplate}}
|
@ -0,0 +1,3 @@
|
||||
final Serializers _serializers;
|
||||
|
||||
const {{classname}}(this._dio, this._serializers);
|
@ -0,0 +1 @@
|
||||
import 'package:built_value/serializer.dart';
|
@ -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}}
|
||||
{{/bodyParam}}
|
Loading…
x
Reference in New Issue
Block a user