diff --git a/docs/generators/dart-dio.md b/docs/generators/dart-dio.md index f93b09ffbf8d..7e62f92f0782 100644 --- a/docs/generators/dart-dio.md +++ b/docs/generators/dart-dio.md @@ -37,6 +37,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |pubRepository|Repository in generated pubspec| |null| |pubVersion|Version in generated pubspec| |1.0.0| |serializationLibrary|Specify serialization library|
**built_value**
[DEFAULT] built_value
**json_serializable**
[BETA] json_serializable
|built_value| +|skipCopyWith|Skip CopyWith when using Json Serializable for serialization| |false| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src| 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 cf8338e47e3d..d6ab80de2881 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 @@ -69,7 +69,9 @@ public class DartDioClientCodegen extends AbstractDartCodegen { private static final String DIO_IMPORT = "package:dio/dio.dart"; public static final String FINAL_PROPERTIES = "finalProperties"; + public static final String SKIP_COPY_WITH = "skipCopyWith"; public static final String FINAL_PROPERTIES_DEFAULT_VALUE = "true"; + public static final String SKIP_COPY_WITH_DEFAULT_VALUE = "false"; private static final String CLIENT_NAME = "clientName"; @@ -138,6 +140,11 @@ public DartDioClientCodegen() { 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); + + // skip CopyWith option + final CliOption skipCopyWith = CliOption.newBoolean(SKIP_COPY_WITH, "Skip CopyWith when using Json Serializable for serialization"); + skipCopyWith.setDefault("false"); + cliOptions.add(skipCopyWith); } @Override @@ -182,6 +189,13 @@ public void processOpts() { additionalProperties.put(FINAL_PROPERTIES, Boolean.parseBoolean(additionalProperties.get(FINAL_PROPERTIES).toString())); } + if (!additionalProperties.containsKey(SKIP_COPY_WITH)) { + additionalProperties.put(SKIP_COPY_WITH, Boolean.parseBoolean(SKIP_COPY_WITH_DEFAULT_VALUE)); + LOGGER.debug("skipCopyWith not set, using default {}", SKIP_COPY_WITH_DEFAULT_VALUE); + } else { + additionalProperties.put(SKIP_COPY_WITH, Boolean.parseBoolean(additionalProperties.get(SKIP_COPY_WITH).toString())); + } + if (!additionalProperties.containsKey(CLIENT_NAME)) { final String name = org.openapitools.codegen.utils.StringUtils.camelize(pubName); additionalProperties.put(CLIENT_NAME, name); diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache index 402a81fc610b..b0ac707ecee7 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/pubspec.mustache @@ -25,7 +25,9 @@ dependencies: equatable: '^2.0.7' {{/useEquatable}} {{#useJsonSerializable}} + {{^skipCopyWith}} copy_with_extension: '^7.1.0' + {{/skipCopyWith}} json_annotation: '^4.9.0' {{/useJsonSerializable}} {{#useDateLibTimeMachine}} @@ -39,7 +41,9 @@ dev_dependencies: {{/useBuiltValue}} {{#useJsonSerializable}} build_runner: any + {{^skipCopyWith}} copy_with_extension_gen: ^7.1.0 + {{/skipCopyWith}} json_serializable: '^6.9.3' {{/useJsonSerializable}} test: '^1.16.0' diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache index 55bf2bb73466..bee52d4d3bbd 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/class.mustache @@ -1,4 +1,6 @@ +{{^skipCopyWith}} import 'package:copy_with_extension/copy_with_extension.dart'; +{{/skipCopyWith}} import 'package:json_annotation/json_annotation.dart'; {{#useEquatable}} import 'package:equatable/src/equatable_utils.dart'; @@ -18,7 +20,9 @@ part '{{classFilename}}.g.dart'; {{#isDeprecated}} @Deprecated('{{{classname}}} has been deprecated') {{/isDeprecated}} +{{^skipCopyWith}} @CopyWith() +{{/skipCopyWith}} @JsonSerializable( checked: true, createToJson: true, diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartDioClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartDioClientOptionsProvider.java index bcda220f4328..648332073401 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartDioClientOptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartDioClientOptionsProvider.java @@ -72,6 +72,7 @@ public Map createOptions() { .put(CodegenConstants.LEGACY_DISCRIMINATOR_BEHAVIOR, "true") .put(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, "true") .put(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, ENUM_UNKNOWN_DEFAULT_CASE_VALUE) + .put(DartDioClientCodegen.SKIP_COPY_WITH, DartDioClientCodegen.SKIP_COPY_WITH_DEFAULT_VALUE) .build(); }