Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 18 additions & 0 deletions bin/configs/dart-dio-echo-server-dio-built_value.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
generatorName: dart-dio
outputDir: samples/client/echo_api/dart/dart-dio-built_value
inputSpec: modules/openapi-generator/src/test/resources/3_0/dart/echo_api.yaml
templateDir: modules/openapi-generator/src/main/resources/dart/libraries/dio
typeMappings:
Client: "ModelClient"
File: "ModelFile"
EnumClass: "ModelEnumClass"
additionalProperties:
hideGenerationTimestamp: "true"
enumUnknownDefaultCase: "true"
serializationLibrary: "built_value"
networkingLibrary: "dio"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about using library (global option, not generator option) instead?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

currently the serializationLibrary is assigned to library global option (this was introduced in #9980)
I was going to make another PR that targets v7.0.0, with the correct parameters assigned, but I am not sure if this is the right approach

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

artifactId: echo-api-dart-dio-built_value
reservedWordsMappings:
class: "classField"


18 changes: 18 additions & 0 deletions bin/configs/dart-dio-echo-server-dio-json_serializable.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
generatorName: dart-dio
outputDir: samples/client/echo_api/dart/dart-dio-json_serializable
inputSpec: modules/openapi-generator/src/test/resources/3_0/dart/echo_api.yaml
templateDir: modules/openapi-generator/src/main/resources/dart/libraries/dio
typeMappings:
Client: "ModelClient"
File: "ModelFile"
EnumClass: "ModelEnumClass"
additionalProperties:
hideGenerationTimestamp: "true"
enumUnknownDefaultCase: "true"
serializationLibrary: "json_serializable"
networkingLibrary: "dio"
artifactId: echo-api-dart-dio-json_serializable
reservedWordsMappings:
class: "classField"


17 changes: 17 additions & 0 deletions bin/configs/dart-dio-echo-server-http-built_value.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
generatorName: dart-dio
outputDir: samples/client/echo_api/dart/dart-http-built_value
inputSpec: modules/openapi-generator/src/test/resources/3_0/dart/echo_api.yaml
templateDir: modules/openapi-generator/src/main/resources/dart/libraries/dio
typeMappings:
Client: "ModelClient"
File: "ModelFile"
EnumClass: "ModelEnumClass"
additionalProperties:
hideGenerationTimestamp: "true"
enumUnknownDefaultCase: "true"
serializationLibrary: "built_value"
networkingLibrary: "http"
artifactId: echo-api-dart-http-built_value
reservedWordsMappings:
class: "classField"

18 changes: 18 additions & 0 deletions bin/configs/dart-dio-echo-server-http-json_serializable.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
generatorName: dart-dio
outputDir: samples/client/echo_api/dart/dart-http-json_serializable
inputSpec: modules/openapi-generator/src/test/resources/3_0/dart/echo_api.yaml
templateDir: modules/openapi-generator/src/main/resources/dart/libraries/dio
typeMappings:
Client: "ModelClient"
File: "ModelFile"
EnumClass: "ModelEnumClass"
additionalProperties:
hideGenerationTimestamp: "true"
enumUnknownDefaultCase: "true"
serializationLibrary: "json_serializable"
networkingLibrary: "http"
artifactId: echo-api-dart-dio-json_serializable
reservedWordsMappings:
class: "classField"


11 changes: 0 additions & 11 deletions bin/configs/dart-dio-oneof-polymorphism-and-inheritance.yaml

This file was deleted.

11 changes: 0 additions & 11 deletions bin/configs/dart-dio-oneof-primitive.yaml

This file was deleted.

11 changes: 0 additions & 11 deletions bin/configs/dart-dio-oneof.yaml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public class DartDioClientCodegen extends AbstractDartCodegen {
private final Logger LOGGER = LoggerFactory.getLogger(DartDioClientCodegen.class);

public static final String DATE_LIBRARY = "dateLibrary";
public static final String NETWORKING_LIBRARY = "networkingLibrary";
public static final String DATE_LIBRARY_CORE = "core";
public static final String DATE_LIBRARY_TIME_MACHINE = "timemachine";
public static final String DATE_LIBRARY_DEFAULT = DATE_LIBRARY_CORE;
Expand All @@ -66,14 +67,21 @@ public class DartDioClientCodegen extends AbstractDartCodegen {
public static final String SERIALIZATION_LIBRARY_JSON_SERIALIZABLE = "json_serializable";
public static final String SERIALIZATION_LIBRARY_DEFAULT = SERIALIZATION_LIBRARY_BUILT_VALUE;

public static final String NETWORKING_LIBRARY_DIO = "dio";
public static final String NETWORKING_LIBRARY_HTTP = "http";
public static final String NETWORKING_LIBRARY_DEFAULT = NETWORKING_LIBRARY_DIO;

private static final String DIO_IMPORT = "package:dio/dio.dart";
private static final String HTTP_IMPORT = "package:http/http.dart";
public static final String FINAL_PROPERTIES = "finalProperties";
public static final String FINAL_PROPERTIES_DEFAULT_VALUE = "true";

private static final String CLIENT_NAME = "clientName";

private String dateLibrary;

private String networkingLibrary;

private String clientName;

private TemplateManager templateManager;
Expand Down Expand Up @@ -102,13 +110,25 @@ public DartDioClientCodegen() {
embeddedTemplateDir = "dart/libraries/dio";
this.setTemplateDir(embeddedTemplateDir);

//SERIALIZATION_LIBRARY options
supportedLibraries.put(SERIALIZATION_LIBRARY_BUILT_VALUE, "[DEFAULT] built_value");
supportedLibraries.put(SERIALIZATION_LIBRARY_JSON_SERIALIZABLE, "[BETA] json_serializable");
final CliOption serializationLibrary = CliOption.newString(CodegenConstants.SERIALIZATION_LIBRARY, "Specify serialization library");
serializationLibrary.setEnum(supportedLibraries);
serializationLibrary.setDefault(SERIALIZATION_LIBRARY_DEFAULT);
cliOptions.add(serializationLibrary);

//NETWORKING_LIBRARY options
final CliOption networkingOption = CliOption.newString(NETWORKING_LIBRARY, "Specify networking library");
networkingOption.setDefault(NETWORKING_LIBRARY_DEFAULT);

final Map<String, String> networkingOptions = new HashMap<>();
networkingOptions.put(NETWORKING_LIBRARY_DIO, "[DEFAULT] Dio");
networkingOptions.put(NETWORKING_LIBRARY_HTTP, "[BETA] http");
networkingOption.setEnum(networkingOptions);
cliOptions.add(networkingOption);

//FINAL_PROPERTIES option
final CliOption finalProperties = CliOption.newBoolean(FINAL_PROPERTIES, "Whether properties are marked as final when using Json Serializable for serialization");
finalProperties.setDefault("true");
cliOptions.add(finalProperties);
Expand All @@ -132,6 +152,14 @@ public void setDateLibrary(String library) {
this.dateLibrary = library;
}

public String getNetworkingLibrary() {
return networkingLibrary;
}

public void setNetworkingLibrary(String networkingLibrary) {
this.networkingLibrary = networkingLibrary;
}

public String getClientName() {
return clientName;
}
Expand All @@ -147,7 +175,7 @@ public String getName() {

@Override
public String getHelp() {
return "Generates a Dart Dio client library with null-safety.";
return "Generates a Dart client library with null-safety.";
}

@Override
Expand All @@ -174,6 +202,12 @@ public void processOpts() {
}
setDateLibrary(additionalProperties.get(DATE_LIBRARY).toString());

if (!additionalProperties.containsKey(NETWORKING_LIBRARY)) {
additionalProperties.put(NETWORKING_LIBRARY, NETWORKING_LIBRARY_DEFAULT);
LOGGER.debug("Networking library not set, using default {}", NETWORKING_LIBRARY_DEFAULT);
}
setNetworkingLibrary(additionalProperties.get(NETWORKING_LIBRARY).toString());

if (!additionalProperties.containsKey(FINAL_PROPERTIES)) {
additionalProperties.put(FINAL_PROPERTIES, Boolean.parseBoolean(FINAL_PROPERTIES_DEFAULT_VALUE));
LOGGER.debug("finalProperties not set, using default {}", FINAL_PROPERTIES_DEFAULT_VALUE);
Expand All @@ -198,16 +232,99 @@ public void processOpts() {

final String srcFolder = libPath + sourceFolder;
supportingFiles.add(new SupportingFile("api_client.mustache", srcFolder, "api.dart"));

final String authFolder = srcFolder + File.separator + "auth";
supportingFiles.add(new SupportingFile("auth/api_key_auth.mustache", authFolder, "api_key_auth.dart"));
supportingFiles.add(new SupportingFile("auth/basic_auth.mustache", authFolder, "basic_auth.dart"));
supportingFiles.add(new SupportingFile("auth/bearer_auth.mustache", authFolder, "bearer_auth.dart"));
supportingFiles.add(new SupportingFile("auth/oauth.mustache", authFolder, "oauth.dart"));
supportingFiles.add(new SupportingFile("auth/auth.mustache", authFolder, "auth.dart"));

//model exports
supportingFiles.add(new SupportingFile("model_exports.mustache", srcFolder + File.separator + modelPackage(), "_exports.dart"));
//api exports
supportingFiles.add(new SupportingFile("api_exports.mustache", srcFolder + File.separator + apiPackage(), "_exports.dart"));

TemplateManagerOptions templateManagerOptions = new TemplateManagerOptions(isEnableMinimalUpdate(), isSkipOverwrite());
TemplatePathLocator commonTemplateLocator = new CommonTemplateContentLocator();
TemplatePathLocator generatorTemplateLocator = new GeneratorTemplateContentLocator(this);
templateManager = new TemplateManager(
templateManagerOptions,
getTemplatingEngine(),
new TemplatePathLocator[]{generatorTemplateLocator, commonTemplateLocator}
);

configureSerializationLibrary(srcFolder);
configureDateLibrary(srcFolder);
configureNetworkingLibrary(srcFolder);


// A lambda which allows for easy includes of interescting networking and serialization library specific
// templates without having to change the main template files.
additionalProperties.put("includeSubTemplate", (Mustache.Lambda) (fragment, writer) -> {
MustacheEngineAdapter engine = ((MustacheEngineAdapter) getTemplatingEngine());
String templateFile = networkingLibrary + "-" + 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 configureNetworkingLibrary(String srcFolder) {
switch (networkingLibrary) {
case NETWORKING_LIBRARY_DIO:
additionalProperties.put("useDio", "true");
configureNetworkingLibraryDio(srcFolder);
break;
case NETWORKING_LIBRARY_HTTP:
additionalProperties.put("useHttp", "true");
configureNetworkingLibraryHttp(srcFolder);
break;
default:
break;
}

// A lambda which allows for easy includes of networking library specific
// templates without having to change the main template files.
additionalProperties.put("includeNetworkingLibraryTemplate", (Mustache.Lambda) (fragment, writer) -> {
MustacheEngineAdapter engine = ((MustacheEngineAdapter) getTemplatingEngine());
String templateFile = "networking/" + networkingLibrary + "/" + fragment.execute() + ".mustache";
Template tmpl = engine.getCompiler()
.withLoader(name -> engine.findTemplate(templateManager, name))
.defaultValue("")
.compile(templateManager.getFullTemplateContents(templateFile));

fragment.executeTemplate(tmpl, writer);
});



}

private void configureNetworkingLibraryDio(String srcFolder) {
imports.put("MultipartFile", DIO_IMPORT);

final String authFolder = srcFolder + File.separator + "auth";
final String authMustacheFolder = "networking/dio/auth";
supportingFiles.add(new SupportingFile("networking/dio/api_util.mustache", srcFolder, "api_util.dart"));

supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "_exports.mustache", authFolder, "_exports.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "api_key_auth.mustache", authFolder, "api_key_auth.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "authentication.mustache", authFolder, "auth.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "basic_auth.mustache", authFolder, "basic_auth.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "bearer_auth.mustache", authFolder, "bearer_auth.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "oauth.mustache", authFolder, "oauth.dart"));
}

private void configureNetworkingLibraryHttp(String srcFolder) {
imports.put("MultipartFile", HTTP_IMPORT);

final String authFolder = srcFolder + File.separator + "auth";
final String authMustacheFolder = "networking/http/auth";
supportingFiles.add(new SupportingFile("networking/http/api_util.mustache", srcFolder, "api_util.dart"));

supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "_exports.mustache", authFolder, "_exports.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "api_key_auth.mustache", authFolder, "api_key_auth.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "authentication.mustache", authFolder, "auth.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "basic_auth.mustache", authFolder, "basic_auth.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "bearer_auth.mustache", authFolder, "bearer_auth.dart"));
supportingFiles.add(new SupportingFile(authMustacheFolder + File.separator + "oauth.mustache", authFolder, "oauth.dart"));
}

private void configureSerializationLibrary(String srcFolder) {
Expand All @@ -223,15 +340,7 @@ private void configureSerializationLibrary(String 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) -> {
Expand All @@ -247,8 +356,7 @@ private void configureSerializationLibrary(String srcFolder) {
}

private void configureSerializationLibraryBuiltValue(String srcFolder) {
supportingFiles.add(new SupportingFile("serialization/built_value/serializers.mustache", srcFolder, "serializers.dart"));
supportingFiles.add(new SupportingFile("serialization/built_value/api_util.mustache", srcFolder, "api_util.dart"));
supportingFiles.add(new SupportingFile("serialization/built_value/serializers.mustache", srcFolder, "serializers.dart"));

typeMapping.put("Array", "BuiltList");
typeMapping.put("array", "BuiltList");
Expand All @@ -265,7 +373,6 @@ private void configureSerializationLibraryBuiltValue(String srcFolder) {
imports.put("BuiltMap", "package:built_collection/built_collection.dart");
imports.put("JsonObject", "package:built_value/json_object.dart");
imports.put("Uint8List", "dart:typed_data");
imports.put("MultipartFile", DIO_IMPORT);
}

private void configureSerializationLibraryJsonSerializable(String srcFolder) {
Expand All @@ -277,9 +384,8 @@ private void configureSerializationLibraryJsonSerializable(String srcFolder) {
// just the binary / file handling
languageSpecificPrimitives.add("Object");
imports.put("Uint8List", "dart:typed_data");
imports.put("MultipartFile", DIO_IMPORT);
}

private void configureDateLibrary(String srcFolder) {
switch (dateLibrary) {
case DATE_LIBRARY_TIME_MACHINE:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# {{pubName}} (EXPERIMENTAL)
# {{pubName}}
{{#appDescriptionWithNewLines}}
{{{.}}}
{{/appDescriptionWithNewLines}}
Expand All @@ -20,7 +20,12 @@ For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}})
## Requirements

* Dart 2.12.0 or later OR Flutter 1.26.0 or later
{{#useDio}}
* Dio 4.0.0+
{{/useDio}}
{{#useHttp}}
* http 0.13.5+
{{/useHttp}}
{{#useDateLibTimeMachine}}
* timemachine option currently **DOES NOT** support sound null-safety and may not work
{{/useDateLibTimeMachine}}
Expand Down
Loading