From aa69e5a9a4cdcf196a138ba2d44a2a9cec63d86a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Thu, 30 Oct 2025 22:40:38 +0100 Subject: [PATCH 01/14] Add support for `Optional` in Dart generator (both dart and dart-dio) to distinguish absent, null, and present states --- .../languages/AbstractDartCodegen.java | 153 +++++++++++++++++- .../codegen/languages/DartClientCodegen.java | 5 + .../languages/DartDioClientCodegen.java | 4 + .../dart/libraries/dio/optional.mustache | 137 ++++++++++++++++ .../json_serializable/class.mustache | 10 +- .../dart_constructor.mustache | 10 +- .../src/main/resources/dart2/apilib.mustache | 3 + .../resources/dart2/dart_constructor.mustache | 9 +- .../main/resources/dart2/optional.mustache | 110 +++++++++++++ .../native/native_class.mustache | 87 +++++++++- .../serialization/native/native_enum.mustache | 6 +- .../native/native_enum_inline.mustache | 6 +- 12 files changed, 523 insertions(+), 17 deletions(-) create mode 100644 modules/openapi-generator/src/main/resources/dart/libraries/dio/optional.mustache create mode 100644 modules/openapi-generator/src/main/resources/dart2/optional.mustache diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java index f002ee8d8d6a..1eb4d221cf4a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java @@ -1,9 +1,12 @@ package org.openapitools.codegen.languages; import com.google.common.collect.Sets; +import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; +import io.swagger.v3.oas.models.parameters.Parameter; +import io.swagger.v3.oas.models.parameters.RequestBody; import io.swagger.v3.oas.models.servers.Server; import lombok.Setter; import org.apache.commons.io.FilenameUtils; @@ -45,6 +48,8 @@ public abstract class AbstractDartCodegen extends DefaultCodegen { public static final String PUB_REPOSITORY = "pubRepository"; public static final String PUB_PUBLISH_TO = "pubPublishTo"; public static final String USE_ENUM_EXTENSION = "useEnumExtension"; + public static final String USE_OPTIONAL = "useOptional"; + public static final String PATCH_ONLY = "patchOnly"; @Setter protected String pubLibrary = "openapi.api"; @Setter protected String pubName = "openapi"; @@ -56,8 +61,12 @@ public abstract class AbstractDartCodegen extends DefaultCodegen { @Setter protected String pubRepository = null; @Setter protected String pubPublishTo = null; @Setter protected boolean useEnumExtension = false; + @Setter protected boolean useOptional = false; + @Setter protected boolean patchOnly = false; @Setter protected String sourceFolder = "src"; protected String libPath = "lib" + File.separator; + + protected Set patchRequestSchemas = new HashSet<>(); protected String apiDocPath = "doc/"; protected String modelDocPath = "doc/"; protected String apiTestPath = "test" + File.separator; @@ -195,6 +204,8 @@ public AbstractDartCodegen() { addOption(PUB_REPOSITORY, "Repository in generated pubspec", pubRepository); addOption(PUB_PUBLISH_TO, "Publish_to in generated pubspec", pubPublishTo); addOption(USE_ENUM_EXTENSION, "Allow the 'x-enum-values' extension for enums", String.valueOf(useEnumExtension)); + addOption(USE_OPTIONAL, "Use Optional to distinguish absent, null, and present for optional fields (Dart 3+)", String.valueOf(useOptional)); + addOption(PATCH_ONLY, "Only apply Optional to PATCH operation request bodies (requires useOptional=true)", String.valueOf(patchOnly)); addOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC, sourceFolder); } @@ -301,6 +312,24 @@ public void processOpts() { additionalProperties.put(USE_ENUM_EXTENSION, useEnumExtension); } + if (additionalProperties.containsKey(USE_OPTIONAL)) { + this.setUseOptional(convertPropertyToBooleanAndWriteBack(USE_OPTIONAL)); + } else { + additionalProperties.put(USE_OPTIONAL, useOptional); + } + + if (additionalProperties.containsKey(PATCH_ONLY)) { + this.setPatchOnly(convertPropertyToBooleanAndWriteBack(PATCH_ONLY)); + } else { + additionalProperties.put(PATCH_ONLY, patchOnly); + } + + if (patchOnly && !useOptional) { + LOGGER.warn("patchOnly=true requires useOptional=true. Setting useOptional=true."); + this.setUseOptional(true); + additionalProperties.put(USE_OPTIONAL, true); + } + if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)) { String srcFolder = (String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER); this.setSourceFolder(srcFolder.replace('/', File.separatorChar)); @@ -544,6 +573,35 @@ public String getTypeDeclaration(Schema p) { return super.getTypeDeclaration(p); } + @Override + public void preprocessOpenAPI(OpenAPI openAPI) { + super.preprocessOpenAPI(openAPI); + + if (patchOnly && openAPI.getPaths() != null) { + openAPI.getPaths().forEach((path, pathItem) -> { + if (pathItem.getPatch() != null) { + Operation patchOp = pathItem.getPatch(); + if (patchOp.getRequestBody() != null) { + RequestBody requestBody = ModelUtils.getReferencedRequestBody(openAPI, patchOp.getRequestBody()); + if (requestBody != null && requestBody.getContent() != null) { + requestBody.getContent().forEach((mediaType, content) -> { + if (content.getSchema() != null) { + String ref = content.getSchema().get$ref(); + if (ref != null) { + String schemaName = ModelUtils.getSimpleRef(ref); + String modelName = toModelName(schemaName); + patchRequestSchemas.add(modelName); + LOGGER.info("Identified '{}' as PATCH request schema (will use Optional)", modelName); + } + } + }); + } + } + } + }); + } + } + @Override public String getSchemaType(Schema p) { String openAPIType = super.getSchemaType(p); @@ -558,7 +616,49 @@ public String getSchemaType(Schema p) { @Override public ModelsMap postProcessModels(ModelsMap objs) { - return postProcessModelsEnum(objs); + objs = postProcessModelsEnum(objs); + + if (useOptional) { + for (ModelMap modelMap : objs.getModels()) { + CodegenModel model = modelMap.getModel(); + + boolean shouldUseOptional; + + if (patchOnly) { + shouldUseOptional = patchRequestSchemas.contains(model.classname); + } else { + Boolean schemaUseOptional = (Boolean) model.vendorExtensions.get("x-use-optional"); + shouldUseOptional = schemaUseOptional != null && schemaUseOptional; + } + + if (shouldUseOptional) { + for (CodegenProperty prop : model.vars) { + if (!prop.required && !prop.dataType.startsWith("Optional<")) { + wrapPropertyWithOptional(prop); + } + } + } + } + } + + return objs; + } + + private void wrapPropertyWithOptional(CodegenProperty property) { + property.vendorExtensions.put("x-unwrapped-datatype", property.dataType); + property.vendorExtensions.put("x-is-optional", true); + property.vendorExtensions.put("x-original-is-number", property.isNumber); + property.vendorExtensions.put("x-original-is-integer", property.isInteger); + + boolean hasNullableSuffix = property.dataType.endsWith("?"); + String baseType = hasNullableSuffix ? property.dataType.substring(0, property.dataType.length() - 1) : property.dataType; + property.dataType = "Optional<" + baseType + "?" + ">"; + + if (property.datatypeWithEnum != null && !property.datatypeWithEnum.startsWith("Optional<")) { + hasNullableSuffix = property.datatypeWithEnum.endsWith("?"); + baseType = hasNullableSuffix ? property.datatypeWithEnum.substring(0, property.datatypeWithEnum.length() - 1) : property.datatypeWithEnum; + property.datatypeWithEnum = "Optional<" + baseType + "?" + ">"; + } } @Override @@ -623,6 +723,19 @@ public CodegenProperty fromProperty(String name, Schema p, boolean required) { return property; } + @Override + public CodegenParameter fromParameter(Parameter parameter, Set imports) { + final CodegenParameter param = super.fromParameter(parameter, imports); + + if (useOptional && param.dataType != null && param.dataType.startsWith("Optional<")) { + param.dataType = param.dataType.substring("Optional<".length(), param.dataType.length() - 1); + param.vendorExtensions.remove("x-is-optional"); + param.vendorExtensions.remove("x-unwrapped-datatype"); + } + + return param; + } + @Override public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List servers) { final CodegenOperation op = super.fromOperation(path, httpMethod, operation, servers); @@ -659,6 +772,21 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List ops = operations.getOperation(); for (CodegenOperation op : ops) { + if (patchOnly && "PATCH".equalsIgnoreCase(op.httpMethod)) { + if (op.bodyParam != null && op.bodyParam.dataType != null) { + String modelName = getString(op); + patchRequestSchemas.add(modelName); + LOGGER.debug("Marked schema '{}' for Optional wrapping (PATCH request body)", modelName); + } + } + + if (useOptional) { + unwrapOptionalFromParameters(op.pathParams); + unwrapOptionalFromParameters(op.queryParams); + unwrapOptionalFromParameters(op.headerParams); + unwrapOptionalFromParameters(op.formParams); + } + if (op.hasConsumes) { if (!op.formParams.isEmpty() || op.isMultipart) { // DefaultCodegen only sets this if the first consumes mediaType @@ -680,6 +808,29 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List'); + if (start > 0 && end > start) { + modelName = modelName.substring(start, end); + } + } + modelName = modelName.replace("?", ""); + return modelName; + } + + private void unwrapOptionalFromParameters(List params) { + if (params == null) return; + for (CodegenParameter param : params) { + if (param.dataType != null && param.dataType.startsWith("Optional<")) { + param.dataType = param.dataType.substring("Optional<".length(), param.dataType.length() - 1); + param.vendorExtensions.remove("x-is-optional"); + } + } + } + private List> prioritizeContentTypes(List> consumes) { if (consumes.size() <= 1) { // no need to change any order diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java index a9ada095aa40..bcb5ebe195aa 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java @@ -74,6 +74,11 @@ public void processOpts() { supportingFiles.add(new SupportingFile("auth/http_bearer_auth.mustache", authFolder, "http_bearer_auth.dart")); supportingFiles.add(new SupportingFile("auth/api_key_auth.mustache", authFolder, "api_key_auth.dart")); supportingFiles.add(new SupportingFile("auth/oauth.mustache", authFolder, "oauth.dart")); + + if (useOptional) { + supportingFiles.add(new SupportingFile("optional.mustache", libPath, "optional.dart")); + } + supportingFiles.add(new SupportingFile("git_push.sh.mustache", "", "git_push.sh")); supportingFiles.add(new SupportingFile("gitignore.mustache", "", ".gitignore")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); 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 d9d038746372..73132481e383 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 @@ -220,6 +220,10 @@ public void processOpts() { supportingFiles.add(new SupportingFile("auth/oauth.mustache", authFolder, "oauth.dart")); supportingFiles.add(new SupportingFile("auth/auth.mustache", authFolder, "auth.dart")); + if (useOptional) { + supportingFiles.add(new SupportingFile("optional.mustache", srcFolder, "optional.dart")); + } + configureSerializationLibrary(srcFolder); configureEqualityCheckMethod(srcFolder); configureDateLibrary(srcFolder); diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/optional.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/optional.mustache new file mode 100644 index 000000000000..b734d8440500 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/optional.mustache @@ -0,0 +1,137 @@ +{{>header}} +import 'package:json_annotation/json_annotation.dart'; + +/// Represents an optional value that can be either absent or present. +/// +/// This is used to distinguish between three states in PATCH operations: +/// - Absent: Field is not set (omitted from JSON) +/// - Present with null: Field is explicitly set to null +/// - Present with value: Field has a value +/// +/// Example usage: +/// ```dart +/// // Field absent - not sent in request +/// final patch1 = Model(); +/// +/// // Field explicitly null - sends {"field": null} +/// final patch2 = Model(field: const Optional.present(null)); +/// +/// // Field has value - sends {"field": "value"} +/// final patch3 = Model(field: const Optional.present('value')); +/// ``` +sealed class Optional { + const Optional(); + + /// Creates an Optional with an absent value (not set). + const factory Optional.absent() = Absent; + + /// Creates an Optional with a present value (can be null). + const factory Optional.present(T value) = Present; + + /// Returns true if this Optional has a value (even if that value is null). + bool get isPresent; + + /// Returns true if this Optional does not have a value. + bool get isEmpty => !isPresent; + + /// Returns the value if present, throws if absent. + T get value; + + /// Returns the value if present, otherwise returns [defaultValue]. + T orElse(T defaultValue); + + /// Returns the value if present, otherwise returns the result of calling [defaultValue]. + T orElseGet(T Function() defaultValue); + + /// Maps the value if present using [transform], otherwise returns an absent Optional. + Optional map(R Function(T value) transform); +} + +/// Represents an absent Optional value. +final class Absent extends Optional { + const Absent(); + + @override + bool get isPresent => false; + + @override + T get value => throw StateError('No value present'); + + @override + T orElse(T defaultValue) => defaultValue; + + @override + T orElseGet(T Function() defaultValue) => defaultValue(); + + @override + Optional map(R Function(T value) transform) => const Absent(); + + @override + bool operator ==(Object other) => other is Absent; + + @override + int get hashCode => 0; + + @override + String toString() => 'Optional.absent()'; +} + +/// Represents a present Optional value. +final class Present extends Optional { + const Present(this._value); + + final T _value; + + @override + bool get isPresent => true; + + @override + T get value => _value; + + @override + T orElse(T defaultValue) => _value; + + @override + T orElseGet(T Function() defaultValue) => _value; + + @override + Optional map(R Function(T value) transform) => Optional.present(transform(_value)); + + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Present && _value == other._value); + + @override + int get hashCode => _value.hashCode; + + @override + String toString() => 'Optional.present($_value)'; +} + +/// JSON converter for Optional values. +/// +/// This converter handles serialization and deserialization of Optional values: +/// - Optional.absent() -> field omitted from JSON +/// - Optional.present(null) -> {"field": null} +/// - Optional.present(value) -> {"field": value} +/// +/// Usage with json_serializable: +/// ```dart +/// @JsonKey() +/// @OptionalConverter() +/// final Optional field; +/// ``` +class OptionalConverter implements JsonConverter, T?> { + const OptionalConverter(); + + @override + Optional fromJson(T? json) { + return json == null ? const Optional.absent() : Optional.present(json); + } + + @override + T? toJson(Optional object) { + return object.isPresent ? object.value : null; + } +} 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 bee52d4d3bbd..a0003f883a3b 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 @@ -5,6 +5,9 @@ import 'package:json_annotation/json_annotation.dart'; {{#useEquatable}} import 'package:equatable/src/equatable_utils.dart'; {{/useEquatable}} +{{#useOptional}} +import 'package:{{pubName}}/src/optional.dart'; +{{/useOptional}} part '{{classFilename}}.g.dart'; @@ -49,6 +52,9 @@ class {{{classname}}} { @Deprecated('{{{name}}} has been deprecated') {{/deprecated}} {{^isBinary}} + {{^required}}{{#useOptional}} + @OptionalConverter() + {{/useOptional}}{{/required}} @JsonKey( {{#defaultValue}}defaultValue: {{{defaultValue}}},{{/defaultValue}} name: r'{{{baseName}}}', @@ -70,7 +76,7 @@ class {{{classname}}} { {{#finalProperties}}final {{/finalProperties}}{{{datatypeWithEnum}}}{{#isNullable}}?{{/isNullable}} {{{name}}}; {{/required}} {{^required}} - {{#finalProperties}}final {{/finalProperties}}{{{datatypeWithEnum}}}? {{{name}}}; + {{#finalProperties}}final {{/finalProperties}}{{{datatypeWithEnum}}}{{^useOptional}}?{{/useOptional}} {{{name}}}; {{/required}} @@ -146,4 +152,4 @@ class {{{classname}}} { {{/mostInnerItems}} {{/isContainer}} {{/isEnum}} -{{/vars}} \ No newline at end of file +{{/vars}} diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache index 3b99f0c54016..3a089369cfd2 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache @@ -6,6 +6,12 @@ A field is required in Dart when it is required && !defaultValue in OAS }} - {{#required}}{{^defaultValue}}required {{/defaultValue}}{{/required}} this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}, + {{^required}}{{#useOptional}} + this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}}, + {{/useOptional}}{{/required}} + {{^required}}{{^useOptional}} + this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}, + {{/useOptional}}{{/required}} + {{#required}}{{^defaultValue}}required {{/defaultValue}}{{/required}}{{#required}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/required}}, {{/vars}} - }); \ No newline at end of file + }); diff --git a/modules/openapi-generator/src/main/resources/dart2/apilib.mustache b/modules/openapi-generator/src/main/resources/dart2/apilib.mustache index 1b1898d88dda..62524c17f033 100644 --- a/modules/openapi-generator/src/main/resources/dart2/apilib.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/apilib.mustache @@ -18,6 +18,9 @@ part 'auth/api_key_auth.dart'; part 'auth/oauth.dart'; part 'auth/http_basic_auth.dart'; part 'auth/http_bearer_auth.dart'; +{{#useOptional}} +part 'optional.dart'; +{{/useOptional}} {{#apiInfo}}{{#apis}}part 'api/{{{classFilename}}}.dart'; {{/apis}}{{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache b/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache index dc5dfec5f2a7..e57a55e3a09f 100644 --- a/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache @@ -5,6 +5,13 @@ A field is required in Dart when it is required && !defaultValue in OAS }} - {{#required}}{{^defaultValue}}required {{/defaultValue}}{{/required}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}, + {{^required}}{{#vendorExtensions.x-is-optional}} + this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}}, + {{/vendorExtensions.x-is-optional}}{{/required}} + {{^required}}{{^vendorExtensions.x-is-optional}} + this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}, + {{/vendorExtensions.x-is-optional}}{{/required}} + {{#required}}{{^defaultValue}}required {{/defaultValue}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}, + {{/required}} {{/vars}} }); diff --git a/modules/openapi-generator/src/main/resources/dart2/optional.mustache b/modules/openapi-generator/src/main/resources/dart2/optional.mustache new file mode 100644 index 000000000000..3cb3f0852daa --- /dev/null +++ b/modules/openapi-generator/src/main/resources/dart2/optional.mustache @@ -0,0 +1,110 @@ +{{>header}} +{{>part_of}} + +/// Represents an optional value that can be either absent or present. +/// +/// This is used to distinguish between three states in PATCH operations: +/// - Absent: Field is not set (omitted from JSON) +/// - Present with null: Field is explicitly set to null +/// - Present with value: Field has a value +/// +/// Example usage: +/// ```dart +/// // Field absent - not sent in request +/// final patch1 = Model(); +/// +/// // Field explicitly null - sends {"field": null} +/// final patch2 = Model(field: const Optional.present(null)); +/// +/// // Field has value - sends {"field": "value"} +/// final patch3 = Model(field: const Optional.present('value')); +/// ``` +abstract class Optional { + const Optional(); + + /// Creates an Optional with an absent value (not set). + const factory Optional.absent() = Absent; + + /// Creates an Optional with a present value (can be null). + const factory Optional.present(T value) = Present; + + /// Returns true if this Optional has a value (even if that value is null). + bool get isPresent; + + /// Returns true if this Optional does not have a value. + bool get isEmpty => !isPresent; + + /// Returns the value if present, throws if absent. + T get value; + + /// Returns the value if present, otherwise returns [defaultValue]. + T orElse(T defaultValue); + + /// Returns the value if present, otherwise returns the result of calling [defaultValue]. + T orElseGet(T Function() defaultValue); + + /// Maps the value if present using [transform], otherwise returns an absent Optional. + Optional map(R Function(T value) transform); +} + +/// Represents an absent Optional value. +class Absent extends Optional { + const Absent(); + + @override + bool get isPresent => false; + + @override + T get value => throw StateError('No value present'); + + @override + T orElse(T defaultValue) => defaultValue; + + @override + T orElseGet(T Function() defaultValue) => defaultValue(); + + @override + Optional map(R Function(T value) transform) => const Absent(); + + @override + bool operator ==(Object other) => other is Absent; + + @override + int get hashCode => 0; + + @override + String toString() => 'Optional.absent()'; +} + +/// Represents a present Optional value. +class Present extends Optional { + const Present(this._value); + + final T _value; + + @override + bool get isPresent => true; + + @override + T get value => _value; + + @override + T orElse(T defaultValue) => _value; + + @override + T orElseGet(T Function() defaultValue) => _value; + + @override + Optional map(R Function(T value) transform) => Optional.present(transform(_value)); + + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Present && _value == other._value); + + @override + int get hashCode => _value.hashCode; + + @override + String toString() => 'Optional.present($_value)'; +} diff --git a/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache b/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache index b4ba0b716a12..19bfa96997c8 100644 --- a/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache @@ -33,7 +33,17 @@ class {{{classname}}} { {{/required}} {{/isNullable}} {{/isEnum}} - {{{datatypeWithEnum}}}{{#isNullable}}?{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}?{{/defaultValue}}{{/required}}{{/isNullable}} {{{name}}}; + {{#required}} + {{{datatypeWithEnum}}}{{#isNullable}}?{{/isNullable}} {{{name}}}; + {{/required}} + {{^required}} + {{#vendorExtensions.x-is-optional}} + {{{datatypeWithEnum}}} {{{name}}}; + {{/vendorExtensions.x-is-optional}} + {{^vendorExtensions.x-is-optional}} + {{{datatypeWithEnum}}}{{#isNullable}}?{{/isNullable}}{{^isNullable}}{{^defaultValue}}?{{/defaultValue}}{{/isNullable}} {{{name}}}; + {{/vendorExtensions.x-is-optional}} + {{/required}} {{/vars}} @override @@ -55,6 +65,37 @@ class {{{classname}}} { Map toJson() { final json = {}; {{#vars}} + {{#vendorExtensions.x-is-optional}} + if (this.{{{name}}}.isPresent) { + final value = this.{{{name}}}.value; + {{#isDateTime}} + {{#pattern}} + json[r'{{{baseName}}}'] = value == null ? null : (_isEpochMarker(r'{{{pattern}}}') + ? value.millisecondsSinceEpoch + : value.toUtc().toIso8601String()); + {{/pattern}} + {{^pattern}} + json[r'{{{baseName}}}'] = value == null ? null : value.toUtc().toIso8601String(); + {{/pattern}} + {{/isDateTime}} + {{#isDate}} + {{#pattern}} + json[r'{{{baseName}}}'] = value == null ? null : (_isEpochMarker(r'{{{pattern}}}') + ? value.millisecondsSinceEpoch + : _dateFormatter.format(value.toUtc())); + {{/pattern}} + {{^pattern}} + json[r'{{{baseName}}}'] = value == null ? null : _dateFormatter.format(value.toUtc()); + {{/pattern}} + {{/isDate}} + {{^isDateTime}} + {{^isDate}} + json[r'{{{baseName}}}'] = value{{#isArray}}{{#uniqueItems}} == null ? null : value.toList(growable: false){{/uniqueItems}}{{/isArray}}; + {{/isDate}} + {{/isDateTime}} + } + {{/vendorExtensions.x-is-optional}} + {{^vendorExtensions.x-is-optional}} {{#isNullable}} if (this.{{{name}}} != null) { {{/isNullable}} @@ -104,6 +145,7 @@ class {{{classname}}} { {{/defaultValue}} {{/required}} {{/isNullable}} + {{/vendorExtensions.x-is-optional}} {{/vars}} return json; } @@ -129,10 +171,20 @@ class {{{classname}}} { return {{{classname}}}( {{#vars}} {{#isDateTime}} + {{#vendorExtensions.x-is-optional}} + {{{name}}}: json.containsKey(r'{{{baseName}}}') ? Optional.present(mapDateTime(json, r'{{{baseName}}}', r'{{{pattern}}}')) : const Optional.absent(), + {{/vendorExtensions.x-is-optional}} + {{^vendorExtensions.x-is-optional}} {{{name}}}: mapDateTime(json, r'{{{baseName}}}', r'{{{pattern}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/vendorExtensions.x-is-optional}} {{/isDateTime}} {{#isDate}} + {{#vendorExtensions.x-is-optional}} + {{{name}}}: json.containsKey(r'{{{baseName}}}') ? Optional.present(mapDateTime(json, r'{{{baseName}}}', r'{{{pattern}}}')) : const Optional.absent(), + {{/vendorExtensions.x-is-optional}} + {{^vendorExtensions.x-is-optional}} {{{name}}}: mapDateTime(json, r'{{{baseName}}}', r'{{{pattern}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/vendorExtensions.x-is-optional}} {{/isDate}} {{^isDateTime}} {{^isDate}} @@ -190,7 +242,12 @@ class {{{classname}}} { {{{name}}}: null, // No support for decoding binary content from JSON {{/isBinary}} {{^isBinary}} + {{#vendorExtensions.x-is-optional}} + {{{name}}}: json.containsKey(r'{{{baseName}}}') ? Optional.present({{{complexType}}}.fromJson(json[r'{{{baseName}}}'])) : const Optional.absent(), + {{/vendorExtensions.x-is-optional}} + {{^vendorExtensions.x-is-optional}} {{{name}}}: {{{complexType}}}.fromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, + {{/vendorExtensions.x-is-optional}} {{/isBinary}} {{/isMap}} {{/isArray}} @@ -217,12 +274,32 @@ class {{{classname}}} { : {{/isNullable}}{{{datatypeWithEnum}}}.parse('${json[r'{{{baseName}}}']}'), {{/isNumber}} {{^isNumber}} - {{^isEnum}} + {{#vendorExtensions.x-original-is-integer}} + {{{name}}}: json[r'{{{baseName}}}'] == null ? const Optional.absent() : Optional.present(int.parse('${json[r'{{{baseName}}}']}')), + {{/vendorExtensions.x-original-is-integer}} + {{^vendorExtensions.x-original-is-integer}} + {{#vendorExtensions.x-original-is-number}} + {{{name}}}: json[r'{{{baseName}}}'] == null ? const Optional.absent() : Optional.present(num.parse('${json[r'{{{baseName}}}']}')), + {{/vendorExtensions.x-original-is-number}} + {{^vendorExtensions.x-original-is-number}} + {{^isEnum}} + {{#vendorExtensions.x-is-optional}} + {{{name}}}: json.containsKey(r'{{{baseName}}}') ? Optional.present(mapValueOfType<{{#vendorExtensions.x-unwrapped-datatype}}{{{vendorExtensions.x-unwrapped-datatype}}}{{/vendorExtensions.x-unwrapped-datatype}}{{^vendorExtensions.x-unwrapped-datatype}}{{{datatypeWithEnum}}}{{/vendorExtensions.x-unwrapped-datatype}}>(json, r'{{{baseName}}}')) : const Optional.absent(), + {{/vendorExtensions.x-is-optional}} + {{^vendorExtensions.x-is-optional}} {{{name}}}: mapValueOfType<{{{datatypeWithEnum}}}>(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, - {{/isEnum}} - {{#isEnum}} + {{/vendorExtensions.x-is-optional}} + {{/isEnum}} + {{#isEnum}} + {{#vendorExtensions.x-is-optional}} + {{{name}}}: json.containsKey(r'{{{baseName}}}') ? Optional.present({{{enumName}}}.fromJson(json[r'{{{baseName}}}'])) : const Optional.absent(), + {{/vendorExtensions.x-is-optional}} + {{^vendorExtensions.x-is-optional}} {{{name}}}: {{{enumName}}}.fromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}, - {{/isEnum}} + {{/vendorExtensions.x-is-optional}} + {{/isEnum}} + {{/vendorExtensions.x-original-is-number}} + {{/vendorExtensions.x-original-is-integer}} {{/isNumber}} {{/isMap}} {{/isArray}} diff --git a/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_enum.mustache b/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_enum.mustache index 84217b702b9e..044c40d64ff6 100644 --- a/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_enum.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_enum.mustache @@ -4,12 +4,12 @@ class {{{classname}}} { const {{{classname}}}._(this.value); /// The underlying value of this enum member. - final {{{dataType}}} value; + final {{#vendorExtensions.x-unwrapped-datatype}}{{{vendorExtensions.x-unwrapped-datatype}}}{{/vendorExtensions.x-unwrapped-datatype}}{{^vendorExtensions.x-unwrapped-datatype}}{{{dataType}}}{{/vendorExtensions.x-unwrapped-datatype}} value; @override String toString() => {{#isString}}value{{/isString}}{{^isString}}value.toString(){{/isString}}; - {{{dataType}}} toJson() => value; + {{#vendorExtensions.x-unwrapped-datatype}}{{{vendorExtensions.x-unwrapped-datatype}}}{{/vendorExtensions.x-unwrapped-datatype}}{{^vendorExtensions.x-unwrapped-datatype}}{{{dataType}}}{{/vendorExtensions.x-unwrapped-datatype}} toJson() => value; {{#allowableValues}} {{#enumVars}} @@ -49,7 +49,7 @@ class {{{classname}}}TypeTransformer { const {{{classname}}}TypeTransformer._(); - {{{dataType}}} encode({{{classname}}} data) => data.value; + {{#vendorExtensions.x-unwrapped-datatype}}{{{vendorExtensions.x-unwrapped-datatype}}}{{/vendorExtensions.x-unwrapped-datatype}}{{^vendorExtensions.x-unwrapped-datatype}}{{{dataType}}}{{/vendorExtensions.x-unwrapped-datatype}} encode({{{classname}}} data) => data.value; /// Decodes a [dynamic value][data] to a {{{classname}}}. /// diff --git a/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_enum_inline.mustache b/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_enum_inline.mustache index 1fe4428dcb31..0cf2463b1454 100644 --- a/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_enum_inline.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_enum_inline.mustache @@ -4,12 +4,12 @@ class {{{enumName}}} { const {{{enumName}}}._(this.value); /// The underlying value of this enum member. - final {{{dataType}}} value; + final {{#vendorExtensions.x-unwrapped-datatype}}{{{vendorExtensions.x-unwrapped-datatype}}}{{/vendorExtensions.x-unwrapped-datatype}}{{^vendorExtensions.x-unwrapped-datatype}}{{{dataType}}}{{/vendorExtensions.x-unwrapped-datatype}} value; @override String toString() => {{#isString}}value{{/isString}}{{^isString}}value.toString(){{/isString}}; - {{{dataType}}} toJson() => value; + {{#vendorExtensions.x-unwrapped-datatype}}{{{vendorExtensions.x-unwrapped-datatype}}}{{/vendorExtensions.x-unwrapped-datatype}}{{^vendorExtensions.x-unwrapped-datatype}}{{{dataType}}}{{/vendorExtensions.x-unwrapped-datatype}} toJson() => value; {{#allowableValues}} {{#enumVars}} @@ -49,7 +49,7 @@ class {{{enumName}}}TypeTransformer { const {{{enumName}}}TypeTransformer._(); - {{{dataType}}} encode({{{enumName}}} data) => data.value; + {{#vendorExtensions.x-unwrapped-datatype}}{{{vendorExtensions.x-unwrapped-datatype}}}{{/vendorExtensions.x-unwrapped-datatype}}{{^vendorExtensions.x-unwrapped-datatype}}{{{dataType}}}{{/vendorExtensions.x-unwrapped-datatype}} encode({{{enumName}}} data) => data.value; /// Decodes a [dynamic value][data] to a {{{enumName}}}. /// From 57a8568be471425764d67837414c894a0105cd5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Thu, 30 Oct 2025 23:50:20 +0100 Subject: [PATCH 02/14] Add useOptional and patchOnly options to the Dart client configurations thing for testing (setting both options to "true" for both types) --- .../org/openapitools/codegen/dart/DartClientOptionsTest.java | 2 ++ .../codegen/dart/dio/DartDioClientOptionsTest.java | 2 ++ .../codegen/options/DartClientOptionsProvider.java | 4 ++++ .../codegen/options/DartDioClientOptionsProvider.java | 4 ++++ 4 files changed, 12 insertions(+) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/DartClientOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/DartClientOptionsTest.java index 87dabbbfd00d..23c49f4221fc 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/DartClientOptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/DartClientOptionsTest.java @@ -53,5 +53,7 @@ protected void verifyOptions() { verify(clientCodegen).setSourceFolder(DartClientOptionsProvider.SOURCE_FOLDER_VALUE); verify(clientCodegen).setUseEnumExtension(Boolean.parseBoolean(DartClientOptionsProvider.USE_ENUM_EXTENSION)); verify(clientCodegen).setEnumUnknownDefaultCase(Boolean.parseBoolean(DartClientOptionsProvider.ENUM_UNKNOWN_DEFAULT_CASE_VALUE)); + verify(clientCodegen).setUseOptional(Boolean.parseBoolean(DartClientOptionsProvider.USE_OPTIONAL_VALUE)); + verify(clientCodegen).setPatchOnly(Boolean.parseBoolean(DartClientOptionsProvider.PATCH_ONLY_VALUE)); } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/dio/DartDioClientOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/dio/DartDioClientOptionsTest.java index cb3350d57e2e..d19d388a9402 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/dio/DartDioClientOptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/dio/DartDioClientOptionsTest.java @@ -55,5 +55,7 @@ protected void verifyOptions() { verify(clientCodegen).setLibrary(DartDioClientCodegen.SERIALIZATION_LIBRARY_DEFAULT); verify(clientCodegen).setEqualityCheckMethod(DartDioClientCodegen.EQUALITY_CHECK_METHOD_DEFAULT); verify(clientCodegen).setEnumUnknownDefaultCase(Boolean.parseBoolean(DartDioClientOptionsProvider.ENUM_UNKNOWN_DEFAULT_CASE_VALUE)); + verify(clientCodegen).setUseOptional(Boolean.parseBoolean(DartDioClientOptionsProvider.USE_OPTIONAL_VALUE)); + verify(clientCodegen).setPatchOnly(Boolean.parseBoolean(DartDioClientOptionsProvider.PATCH_ONLY_VALUE)); } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartClientOptionsProvider.java index 50bbfdb5e9b5..e8ae5313da8b 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartClientOptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/DartClientOptionsProvider.java @@ -41,6 +41,8 @@ public class DartClientOptionsProvider implements OptionsProvider { public static final String ALLOW_UNICODE_IDENTIFIERS_VALUE = "false"; public static final String PREPEND_FORM_OR_BODY_PARAMETERS_VALUE = "true"; public static final String ENUM_UNKNOWN_DEFAULT_CASE_VALUE = "false"; + public static final String USE_OPTIONAL_VALUE = "true"; + public static final String PATCH_ONLY_VALUE = "true"; @Override public String getLanguage() { @@ -70,6 +72,8 @@ public Map createOptions() { .put(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, "true") .put("serializationLibrary", "custom") .put(CodegenConstants.ENUM_UNKNOWN_DEFAULT_CASE, ENUM_UNKNOWN_DEFAULT_CASE_VALUE) + .put(DartClientCodegen.USE_OPTIONAL, USE_OPTIONAL_VALUE) + .put(DartClientCodegen.PATCH_ONLY, PATCH_ONLY_VALUE) .build(); } 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 648332073401..a8e0f8381df0 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 @@ -40,6 +40,8 @@ public class DartDioClientOptionsProvider implements OptionsProvider { public static final String PUB_REPOSITORY_VALUE = "Repository"; public static final String PUB_PUBLISH_TO_VALUE = "Publish to"; public static final String ENUM_UNKNOWN_DEFAULT_CASE_VALUE = "false"; + public static final String USE_OPTIONAL_VALUE = "true"; + public static final String PATCH_ONLY_VALUE = "true"; @Override public String getLanguage() { @@ -73,6 +75,8 @@ public Map createOptions() { .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) + .put(DartDioClientCodegen.USE_OPTIONAL, USE_OPTIONAL_VALUE) + .put(DartDioClientCodegen.PATCH_ONLY, PATCH_ONLY_VALUE) .build(); } From 5c706011c9dab3108047a73c251adefbda4b2e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Sun, 2 Nov 2025 20:22:34 +0100 Subject: [PATCH 03/14] Add documentation for useOptional and patchOnly options --- docs/generators/dart-dio.md | 2 ++ docs/generators/dart.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docs/generators/dart-dio.md b/docs/generators/dart-dio.md index 7e62f92f0782..ad2785b266d2 100644 --- a/docs/generators/dart-dio.md +++ b/docs/generators/dart-dio.md @@ -26,6 +26,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |equalityCheckMethod|Specify equality check method. Takes effect only in case if serializationLibrary is json_serializable.|
**default**
[DEFAULT] Built in hash code generation method
**equatable**
Uses equatable library for equality checking
|default| |finalProperties|Whether properties are marked as final when using Json Serializable for serialization| |true| |legacyDiscriminatorBehavior|Set to false for generators with better support for discriminators. (Python, Java, Go, PowerShell, C# have this enabled by default).|
**true**
The mapping in the discriminator includes descendent schemas that allOf inherit from self and the discriminator mapping schemas in the OAS document.
**false**
The mapping in the discriminator includes any descendent schemas that allOf inherit from self, any oneOf schemas, any anyOf schemas, any x-discriminator-values, and the discriminator mapping schemas in the OAS document AND Codegen validates that oneOf and anyOf schemas contain the required discriminator and throws an error if the discriminator is missing.
|true| +|patchOnly|Only apply Optional<T> to PATCH operation request bodies (requires useOptional=true)| |false| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |pubAuthor|Author name in generated pubspec| |Author| |pubAuthorEmail|Email address of the author in generated pubspec| |author@homepage| @@ -42,6 +43,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src| |useEnumExtension|Allow the 'x-enum-values' extension for enums| |false| +|useOptional|Use Optional<T> to distinguish absent, null, and present for optional fields (Dart 3+)| |false| ## IMPORT MAPPING diff --git a/docs/generators/dart.md b/docs/generators/dart.md index 79148a7e4791..746afd0a64d0 100644 --- a/docs/generators/dart.md +++ b/docs/generators/dart.md @@ -23,6 +23,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |ensureUniqueParams|Whether to ensure parameter names are unique in an operation (rename parameters that are not).| |true| |enumUnknownDefaultCase|If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response.With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the server sends an enum case that is not known by the client/spec, they can safely fallback to this case.|
**false**
No changes to the enum's are made, this is the default option.
**true**
With this option enabled, each enum will have a new case, 'unknown_default_open_api', so that when the enum case sent by the server is not known by the client/spec, can safely be decoded to this case.
|false| |legacyDiscriminatorBehavior|Set to false for generators with better support for discriminators. (Python, Java, Go, PowerShell, C# have this enabled by default).|
**true**
The mapping in the discriminator includes descendent schemas that allOf inherit from self and the discriminator mapping schemas in the OAS document.
**false**
The mapping in the discriminator includes any descendent schemas that allOf inherit from self, any oneOf schemas, any anyOf schemas, any x-discriminator-values, and the discriminator mapping schemas in the OAS document AND Codegen validates that oneOf and anyOf schemas contain the required discriminator and throws an error if the discriminator is missing.
|true| +|patchOnly|Only apply Optional<T> to PATCH operation request bodies (requires useOptional=true)| |false| |prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false| |pubAuthor|Author name in generated pubspec| |Author| |pubAuthorEmail|Email address of the author in generated pubspec| |author@homepage| @@ -38,6 +39,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true| |sourceFolder|source folder for generated code| |src| |useEnumExtension|Allow the 'x-enum-values' extension for enums| |false| +|useOptional|Use Optional<T> to distinguish absent, null, and present for optional fields (Dart 3+)| |false| ## IMPORT MAPPING From 8f417a4d04037f1ea7fea36f2dfac69c076c8ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Mon, 3 Nov 2025 07:27:17 +0100 Subject: [PATCH 04/14] Tune the dart mustache (pluss class mustache) to get rid of the extra whitespace --- .../serialization/json_serializable/class.mustache | 1 - .../json_serializable/dart_constructor.mustache | 14 ++------------ .../main/resources/dart2/dart_constructor.mustache | 14 ++------------ 3 files changed, 4 insertions(+), 25 deletions(-) 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 a0003f883a3b..5eb2f5c35a16 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 @@ -35,7 +35,6 @@ part '{{classFilename}}.g.dart'; class {{{classname}}} { {{>serialization/json_serializable/dart_constructor}} - {{#vars}} {{#description}} /// {{{description}}} diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache index 3a089369cfd2..ab26d288e8b6 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache @@ -1,17 +1,7 @@ /// Returns a new [{{{classname}}}] instance. {{{classname}}}({ {{#vars}} - - {{! - A field is required in Dart when it is - required && !defaultValue in OAS - }} - {{^required}}{{#useOptional}} - this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}}, - {{/useOptional}}{{/required}} - {{^required}}{{^useOptional}} - this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}, - {{/useOptional}}{{/required}} - {{#required}}{{^defaultValue}}required {{/defaultValue}}{{/required}}{{#required}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/required}}, + {{! A field is required in Dart when it is required && !defaultValue in OAS }} +{{^required}}{{#useOptional}} this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}},{{/useOptional}}{{/required}}{{^required}}{{^useOptional}} this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/useOptional}}{{/required}}{{#required}} {{^defaultValue}}required {{/defaultValue}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/required}} {{/vars}} }); diff --git a/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache b/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache index e57a55e3a09f..5b18bba44947 100644 --- a/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache @@ -1,17 +1,7 @@ /// Returns a new [{{{classname}}}] instance. {{{classname}}}({ {{#vars}} - {{! - A field is required in Dart when it is - required && !defaultValue in OAS - }} - {{^required}}{{#vendorExtensions.x-is-optional}} - this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}}, - {{/vendorExtensions.x-is-optional}}{{/required}} - {{^required}}{{^vendorExtensions.x-is-optional}} - this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}, - {{/vendorExtensions.x-is-optional}}{{/required}} - {{#required}}{{^defaultValue}}required {{/defaultValue}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}, - {{/required}} + {{! A field is required in Dart when it is required && !defaultValue in OAS }} +{{^required}}{{#vendorExtensions.x-is-optional}} this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}},{{/vendorExtensions.x-is-optional}}{{/required}}{{^required}}{{^vendorExtensions.x-is-optional}} this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/vendorExtensions.x-is-optional}}{{/required}}{{#required}} {{^defaultValue}}required {{/defaultValue}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/required}} {{/vars}} }); From 138c445bbe76895fd4faa420700bf7598eef1eaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Mon, 3 Nov 2025 10:19:26 +0100 Subject: [PATCH 05/14] More tuning of the dart mustache files to adjust amount of whitespace - match previously generated setup --- .../dio/serialization/json_serializable/class.mustache | 7 +++---- .../json_serializable/dart_constructor.mustache | 10 +++++++--- .../src/main/resources/dart2/dart_constructor.mustache | 7 +++++-- 3 files changed, 15 insertions(+), 9 deletions(-) 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 5eb2f5c35a16..ecb9dd41d7f7 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 @@ -35,6 +35,7 @@ part '{{classFilename}}.g.dart'; class {{{classname}}} { {{>serialization/json_serializable/dart_constructor}} + {{#vars}} {{#description}} /// {{{description}}} @@ -51,10 +52,8 @@ class {{{classname}}} { @Deprecated('{{{name}}} has been deprecated') {{/deprecated}} {{^isBinary}} - {{^required}}{{#useOptional}} - @OptionalConverter() - {{/useOptional}}{{/required}} - @JsonKey( +{{^required}}{{#useOptional}} @OptionalConverter() +{{/useOptional}}{{/required}} @JsonKey( {{#defaultValue}}defaultValue: {{{defaultValue}}},{{/defaultValue}} name: r'{{{baseName}}}', required: {{#required}}true{{/required}}{{^required}}false{{/required}}, diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache index ab26d288e8b6..b96c0d361835 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/json_serializable/dart_constructor.mustache @@ -1,7 +1,11 @@ /// Returns a new [{{{classname}}}] instance. {{{classname}}}({ {{#vars}} - {{! A field is required in Dart when it is required && !defaultValue in OAS }} -{{^required}}{{#useOptional}} this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}},{{/useOptional}}{{/required}}{{^required}}{{^useOptional}} this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/useOptional}}{{/required}}{{#required}} {{^defaultValue}}required {{/defaultValue}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/required}} + + {{! + A field is required in Dart when it is + required && !defaultValue in OAS + }} + {{^required}}{{#useOptional}}this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}},{{/useOptional}}{{/required}}{{^required}}{{^useOptional}} this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/useOptional}}{{/required}}{{#required}}{{^defaultValue}}required {{/defaultValue}}{{/required}}{{#required}} this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/required}} {{/vars}} - }); + }); \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache b/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache index 5b18bba44947..29f362d5e58e 100644 --- a/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/dart_constructor.mustache @@ -1,7 +1,10 @@ /// Returns a new [{{{classname}}}] instance. {{{classname}}}({ {{#vars}} - {{! A field is required in Dart when it is required && !defaultValue in OAS }} -{{^required}}{{#vendorExtensions.x-is-optional}} this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}},{{/vendorExtensions.x-is-optional}}{{/required}}{{^required}}{{^vendorExtensions.x-is-optional}} this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/vendorExtensions.x-is-optional}}{{/required}}{{#required}} {{^defaultValue}}required {{/defaultValue}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/required}} + {{! + A field is required in Dart when it is + required && !defaultValue in OAS + }} + {{^required}}{{#vendorExtensions.x-is-optional}}this.{{{name}}}{{#defaultValue}} = const Optional.present({{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}){{/defaultValue}}{{^defaultValue}} = const Optional.absent(){{/defaultValue}},{{/vendorExtensions.x-is-optional}}{{/required}}{{^required}}{{^vendorExtensions.x-is-optional}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/vendorExtensions.x-is-optional}}{{/required}}{{#required}}{{^defaultValue}}required {{/defaultValue}}{{/required}}{{#required}}this.{{{name}}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{.}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}},{{/required}} {{/vars}} }); From 8a8ff1e2faa66eb781d6c36d9cb063b5f09a0883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Mon, 3 Nov 2025 11:45:27 +0100 Subject: [PATCH 06/14] Tune dart mustache templates to fix whitespace stuff by tips from wing328 --- .../dio/serialization/json_serializable/class.mustache | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 ecb9dd41d7f7..e608aeb1e29f 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 @@ -52,8 +52,12 @@ class {{{classname}}} { @Deprecated('{{{name}}} has been deprecated') {{/deprecated}} {{^isBinary}} -{{^required}}{{#useOptional}} @OptionalConverter() -{{/useOptional}}{{/required}} @JsonKey( +{{^required}} +{{#useOptional}} + @OptionalConverter() +{{/useOptional}} +{{/required}} + @JsonKey( {{#defaultValue}}defaultValue: {{{defaultValue}}},{{/defaultValue}} name: r'{{{baseName}}}', required: {{#required}}true{{/required}}{{^required}}false{{/required}}, From 347938e2625a2fd56474bdfa233539ef08fab257 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Tue, 30 Dec 2025 09:55:58 +0100 Subject: [PATCH 07/14] Fix the logic gap where useOptional=true without patchOnly=true appears to do nothing --- .../org/openapitools/codegen/languages/AbstractDartCodegen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java index 1eb4d221cf4a..d969de5e3841 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java @@ -628,7 +628,7 @@ public ModelsMap postProcessModels(ModelsMap objs) { shouldUseOptional = patchRequestSchemas.contains(model.classname); } else { Boolean schemaUseOptional = (Boolean) model.vendorExtensions.get("x-use-optional"); - shouldUseOptional = schemaUseOptional != null && schemaUseOptional; + shouldUseOptional = schemaUseOptional == null || schemaUseOptional; } if (shouldUseOptional) { From b522254ed55071667c4bcb84ca920f6e09a8c207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Tue, 30 Dec 2025 09:56:20 +0100 Subject: [PATCH 08/14] Rename getString() to extractModelNameFromBodyParam() --- .../openapitools/codegen/languages/AbstractDartCodegen.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java index d969de5e3841..bf406311723b 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java @@ -774,7 +774,7 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List Date: Tue, 30 Dec 2025 09:57:23 +0100 Subject: [PATCH 09/14] Add behavioral tests * useOptional flag wrapping non-required properties * patchOnly mode PATCH schema detection * patchOnly=true auto-enabling useOptional * Parameter unwrapping behavior --- .../codegen/dart/DartModelTest.java | 152 ++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/DartModelTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/DartModelTest.java index ce6796966067..b8cfdcd6dde5 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/DartModelTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/DartModelTest.java @@ -19,9 +19,14 @@ import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; +import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.media.*; +import io.swagger.v3.oas.models.parameters.RequestBody; import org.openapitools.codegen.*; +import org.openapitools.codegen.languages.AbstractDartCodegen; import org.openapitools.codegen.languages.DartClientCodegen; +import org.openapitools.codegen.model.OperationMap; +import org.openapitools.codegen.model.OperationsMap; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -564,4 +569,151 @@ public void dateTest() { Assert.assertEquals(op.returnType, "DateTime"); Assert.assertEquals(op.bodyParam.dataType, "DateTime"); } + + @Test(description = "useOptional flag wrapping non-required properties") + public void testUseOptionalFlagWrappingNonRequiredProperties() { + final Schema model = new Schema() + .description("a model with required and optional properties") + .addProperties("id", new IntegerSchema()) + .addProperties("name", new StringSchema()) + .addProperties("description", new StringSchema()) + .addRequiredItem("id"); + + final DartClientCodegen codegen = new DartClientCodegen(); + codegen.setUseOptional(true); + OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model); + codegen.setOpenAPI(openAPI); + codegen.processOpts(); + + final CodegenModel cm = codegen.fromModel("sample", model); + codegen.postProcessModels(createCodegenModelWrapper(cm)); + + final CodegenProperty idProp = cm.vars.get(0); + Assert.assertEquals(idProp.baseName, "id"); + Assert.assertFalse(idProp.dataType.startsWith("Optional<"), "Required property should not be wrapped"); + + final CodegenProperty nameProp = cm.vars.get(1); + Assert.assertEquals(nameProp.baseName, "name"); + Assert.assertTrue(nameProp.dataType.startsWith("Optional<"), "Non-required property should be wrapped"); + Assert.assertTrue((Boolean) nameProp.vendorExtensions.get("x-is-optional")); + + final CodegenProperty descProp = cm.vars.get(2); + Assert.assertEquals(descProp.baseName, "description"); + Assert.assertTrue(descProp.dataType.startsWith("Optional<"), "Non-required property should be wrapped"); + } + + @Test(description = "patchOnly mode PATCH schema detection") + public void testPatchOnlyModePatchSchemaDetection() { + final Schema patchBodySchema = new Schema() + .description("PATCH request body schema") + .addProperties("id", new IntegerSchema()) + .addProperties("name", new StringSchema()) + .addRequiredItem("id"); + + final Schema postBodySchema = new Schema() + .description("POST request body schema") + .addProperties("id", new IntegerSchema()) + .addProperties("title", new StringSchema()) + .addRequiredItem("id"); + + OpenAPI openAPI = TestUtils.createOpenAPI(); + openAPI.getComponents().addSchemas("PatchBody", patchBodySchema); + openAPI.getComponents().addSchemas("PostBody", postBodySchema); + + Operation patchOp = new Operation(); + RequestBody patchRequestBody = new RequestBody(); + MediaType patchMediaType = new MediaType(); + patchMediaType.setSchema(new Schema().$ref("#/components/schemas/PatchBody")); + patchRequestBody.setContent(new Content().addMediaType("application/json", patchMediaType)); + patchOp.setRequestBody(patchRequestBody); + patchOp.setOperationId("updateResource"); + + Operation postOp = new Operation(); + RequestBody postRequestBody = new RequestBody(); + MediaType postMediaType = new MediaType(); + postMediaType.setSchema(new Schema().$ref("#/components/schemas/PostBody")); + postRequestBody.setContent(new Content().addMediaType("application/json", postMediaType)); + postOp.setRequestBody(postRequestBody); + postOp.setOperationId("createResource"); + + PathItem pathItem = new PathItem(); + pathItem.setPatch(patchOp); + pathItem.setPost(postOp); + openAPI.getPaths().addPathItem("/resource", pathItem); + + final DartClientCodegen codegen = new DartClientCodegen(); + codegen.setPatchOnly(true); + codegen.setOpenAPI(openAPI); + codegen.processOpts(); + codegen.preprocessOpenAPI(openAPI); + + final CodegenModel patchModel = codegen.fromModel("PatchBody", patchBodySchema); + codegen.postProcessModels(createCodegenModelWrapper(patchModel)); + + final CodegenModel postModel = codegen.fromModel("PostBody", postBodySchema); + codegen.postProcessModels(createCodegenModelWrapper(postModel)); + + final CodegenProperty patchNameProp = patchModel.vars.get(1); + Assert.assertEquals(patchNameProp.baseName, "name"); + Assert.assertTrue(patchNameProp.dataType.startsWith("Optional<"), + "PATCH body non-required property should be wrapped with Optional"); + + final CodegenProperty postTitleProp = postModel.vars.get(1); + Assert.assertEquals(postTitleProp.baseName, "title"); + Assert.assertFalse(postTitleProp.dataType.startsWith("Optional<"), + "POST body non-required property should NOT be wrapped when patchOnly=true"); + } + + @Test(description = "patchOnly=true auto-enabling useOptional") + public void testPatchOnlyTrueAutoEnablingUseOptional() { + final DartClientCodegen codegen = new DartClientCodegen(); + codegen.additionalProperties().put(AbstractDartCodegen.PATCH_ONLY, true); + + codegen.processOpts(); + + Assert.assertTrue((Boolean) codegen.additionalProperties().get(AbstractDartCodegen.USE_OPTIONAL), + "patchOnly=true should auto-enable useOptional"); + } + + @Test(description = "Parameter unwrapping behavior") + public void testParameterUnwrappingBehavior() { + final Schema model = new Schema() + .description("a model") + .addProperties("id", new IntegerSchema()) + .addProperties("name", new StringSchema()); + + OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", model); + + Operation getOp = new Operation(); + io.swagger.v3.oas.models.parameters.QueryParameter queryParam = + new io.swagger.v3.oas.models.parameters.QueryParameter(); + queryParam.setName("filter"); + queryParam.setSchema(new StringSchema()); + queryParam.setRequired(false); + getOp.addParametersItem(queryParam); + getOp.setOperationId("getResource"); + + PathItem pathItem = new PathItem(); + pathItem.setGet(getOp); + openAPI.getPaths().addPathItem("/resource", pathItem); + + final DartClientCodegen codegen = new DartClientCodegen(); + codegen.setUseOptional(true); + codegen.setOpenAPI(openAPI); + codegen.processOpts(); + + final CodegenOperation op = codegen.fromOperation("/resource", "get", getOp, null); + + OperationsMap opsMap = new OperationsMap(); + OperationMap opMap = new OperationMap(); + opMap.setOperation(Collections.singletonList(op)); + opsMap.setOperation(opMap); + + codegen.postProcessOperationsWithModels(opsMap, Collections.emptyList()); + + Assert.assertFalse(op.queryParams.isEmpty(), "Should have query params"); + CodegenParameter filterParam = op.queryParams.get(0); + Assert.assertFalse(filterParam.dataType.startsWith("Optional<"), + "Query parameter should not be wrapped with Optional"); + } } From 19888ec7e0238461306e517206c137c09cbb3c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Tue, 30 Dec 2025 13:45:52 +0100 Subject: [PATCH 10/14] Fix inconsistency (my own) in native_class.mustache --- .../dart2/serialization/native/native_class.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache b/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache index 19bfa96997c8..e66fbb71f3e3 100644 --- a/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache +++ b/modules/openapi-generator/src/main/resources/dart2/serialization/native/native_class.mustache @@ -275,11 +275,11 @@ class {{{classname}}} { {{/isNumber}} {{^isNumber}} {{#vendorExtensions.x-original-is-integer}} - {{{name}}}: json[r'{{{baseName}}}'] == null ? const Optional.absent() : Optional.present(int.parse('${json[r'{{{baseName}}}']}')), + {{{name}}}: json.containsKey(r'{{{baseName}}}') ? Optional.present(json[r'{{{baseName}}}'] == null ? null : int.parse('${json[r'{{{baseName}}}']}')) : const Optional.absent(), {{/vendorExtensions.x-original-is-integer}} {{^vendorExtensions.x-original-is-integer}} {{#vendorExtensions.x-original-is-number}} - {{{name}}}: json[r'{{{baseName}}}'] == null ? const Optional.absent() : Optional.present(num.parse('${json[r'{{{baseName}}}']}')), + {{{name}}}: json.containsKey(r'{{{baseName}}}') ? Optional.present(json[r'{{{baseName}}}'] == null ? null : num.parse('${json[r'{{{baseName}}}']}')) : const Optional.absent(), {{/vendorExtensions.x-original-is-number}} {{^vendorExtensions.x-original-is-number}} {{^isEnum}} From 98daf05a5994758fb19de2e7414d98442e1373d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Tue, 30 Dec 2025 13:52:43 +0100 Subject: [PATCH 11/14] Remove "dead code" (because of timing). postProcessModels has already executed before postProcessOperationsWithModels. And then we don't even need the extractModelNameFromBodyParam method... --- .../languages/AbstractDartCodegen.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java index bf406311723b..d3af0d265047 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractDartCodegen.java @@ -772,14 +772,6 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List ops = operations.getOperation(); for (CodegenOperation op : ops) { - if (patchOnly && "PATCH".equalsIgnoreCase(op.httpMethod)) { - if (op.bodyParam != null && op.bodyParam.dataType != null) { - String modelName = extractModelNameFromBodyParam(op); - patchRequestSchemas.add(modelName); - LOGGER.debug("Marked schema '{}' for Optional wrapping (PATCH request body)", modelName); - } - } - if (useOptional) { unwrapOptionalFromParameters(op.pathParams); unwrapOptionalFromParameters(op.queryParams); @@ -808,19 +800,6 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List'); - if (start > 0 && end > start) { - modelName = modelName.substring(start, end); - } - } - modelName = modelName.replace("?", ""); - return modelName; - } - private void unwrapOptionalFromParameters(List params) { if (params == null) return; for (CodegenParameter param : params) { From 35143433ff64f9fd8f9c46f0330efe77a74b58eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Tue, 30 Dec 2025 14:31:09 +0100 Subject: [PATCH 12/14] Fix Optional to properly distinguish between absend and null Had issues in dio --- .../dart/libraries/dio/optional.mustache | 34 +++++++++---------- .../json_serializable/class.mustache | 1 + 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/dart/libraries/dio/optional.mustache b/modules/openapi-generator/src/main/resources/dart/libraries/dio/optional.mustache index b734d8440500..9a2747da4e52 100644 --- a/modules/openapi-generator/src/main/resources/dart/libraries/dio/optional.mustache +++ b/modules/openapi-generator/src/main/resources/dart/libraries/dio/optional.mustache @@ -109,29 +109,29 @@ final class Present extends Optional { String toString() => 'Optional.present($_value)'; } -/// JSON converter for Optional values. -/// -/// This converter handles serialization and deserialization of Optional values: -/// - Optional.absent() -> field omitted from JSON -/// - Optional.present(null) -> {"field": null} -/// - Optional.present(value) -> {"field": value} -/// -/// Usage with json_serializable: -/// ```dart -/// @JsonKey() -/// @OptionalConverter() -/// final Optional field; -/// ``` -class OptionalConverter implements JsonConverter, T?> { +class _OptionalAbsentSentinel { + const _OptionalAbsentSentinel(); +} + +const _optionalAbsentSentinel = _OptionalAbsentSentinel(); + +/// Used with @JsonKey(readValue:) to distinguish absent keys from null values. +Object? readOptionalValue(Map map, String key) { + return map.containsKey(key) ? map[key] : _optionalAbsentSentinel; +} + +class OptionalConverter implements JsonConverter, Object?> { const OptionalConverter(); @override - Optional fromJson(T? json) { - return json == null ? const Optional.absent() : Optional.present(json); + Optional fromJson(Object? json) { + return json is _OptionalAbsentSentinel + ? const Optional.absent() + : Optional.present(json as T); } @override - T? toJson(Optional object) { + Object? toJson(Optional object) { return object.isPresent ? object.value : null; } } 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 e608aeb1e29f..163063f0719f 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 @@ -62,6 +62,7 @@ class {{{classname}}} { name: r'{{{baseName}}}', required: {{#required}}true{{/required}}{{^required}}false{{/required}}, includeIfNull: {{#required}}{{#isNullable}}true{{/isNullable}}{{^isNullable}}false{{/isNullable}}{{/required}}{{^required}}false{{/required}}, +{{^required}}{{#useOptional}} readValue: readOptionalValue,{{/useOptional}}{{/required}} {{#isEnumOrRef}} {{#enumUnknownDefaultCase}} unknownEnumValue: {{{datatypeWithEnum}}}.unknownDefaultOpenApi, From 9b1b0ec41fab4c0687d25c041cb51a936116e90e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Wed, 28 Jan 2026 18:15:01 +0100 Subject: [PATCH 13/14] Regenerate Dart samples --- .../src/model/additional_properties_class.dart | 2 ++ .../lib/src/model/all_of_with_single_ref.dart | 2 ++ .../lib/src/model/animal.dart | 2 ++ .../lib/src/model/api_response.dart | 3 +++ .../src/model/array_of_array_of_number_only.dart | 1 + .../lib/src/model/array_of_number_only.dart | 1 + .../lib/src/model/array_test.dart | 3 +++ .../lib/src/model/capitalization.dart | 6 ++++++ .../lib/src/model/cat.dart | 3 +++ .../lib/src/model/category.dart | 2 ++ .../lib/src/model/child_with_nullable.dart | 3 +++ .../lib/src/model/class_model.dart | 1 + .../lib/src/model/deprecated_object.dart | 1 + .../lib/src/model/dog.dart | 3 +++ .../lib/src/model/enum_arrays.dart | 2 ++ .../lib/src/model/enum_test.dart | 8 ++++++++ .../model/fake_big_decimal_map200_response.dart | 2 ++ .../lib/src/model/file_schema_test_class.dart | 2 ++ .../lib/src/model/foo.dart | 1 + .../lib/src/model/foo_get_default_response.dart | 1 + .../lib/src/model/format_test.dart | 15 +++++++++++++++ .../lib/src/model/has_only_read_only.dart | 2 ++ .../lib/src/model/health_check_result.dart | 1 + .../lib/src/model/map_test.dart | 4 ++++ ...roperties_and_additional_properties_class.dart | 3 +++ .../lib/src/model/model200_response.dart | 2 ++ .../lib/src/model/model_client.dart | 1 + .../lib/src/model/model_file.dart | 1 + .../lib/src/model/model_list.dart | 1 + .../lib/src/model/model_return.dart | 1 + .../lib/src/model/name.dart | 4 ++++ .../lib/src/model/nullable_class.dart | 12 ++++++++++++ .../lib/src/model/number_only.dart | 1 + ...ences_objects_with_duplicate_inline_enums.dart | 2 ++ .../src/model/object_with_deprecated_fields.dart | 4 ++++ .../model/object_with_duplicate_inline_enum.dart | 1 + .../lib/src/model/object_with_enum.dart | 1 + .../lib/src/model/object_with_inline_enum.dart | 1 + .../object_with_inline_enum_default_value.dart | 1 + .../lib/src/model/order.dart | 6 ++++++ .../lib/src/model/outer_composite.dart | 3 +++ .../model/outer_object_with_enum_property.dart | 1 + .../lib/src/model/parent_with_nullable.dart | 2 ++ .../lib/src/model/pet.dart | 6 ++++++ .../lib/src/model/read_only_first.dart | 2 ++ .../lib/src/model/special_model_name.dart | 1 + .../lib/src/model/tag.dart | 2 ++ ...ne_freeform_additional_properties_request.dart | 1 + .../lib/src/model/user.dart | 8 ++++++++ 49 files changed, 139 insertions(+) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/additional_properties_class.dart index c0ce2a1090e9..b357ac4bacff 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/additional_properties_class.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/additional_properties_class.dart @@ -30,6 +30,7 @@ class AdditionalPropertiesClass { name: r'map_property', required: false, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class AdditionalPropertiesClass { name: r'map_of_map_property', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/all_of_with_single_ref.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/all_of_with_single_ref.dart index 775b58a1fca6..cc319f9f3d7e 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/all_of_with_single_ref.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/all_of_with_single_ref.dart @@ -31,6 +31,7 @@ class AllOfWithSingleRef { name: r'username', required: false, includeIfNull: false, + ) @@ -43,6 +44,7 @@ class AllOfWithSingleRef { name: r'SingleRefType', required: false, includeIfNull: false, + unknownEnumValue: SingleRefType.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/animal.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/animal.dart index c9abb12b9308..a4f81ea92aca 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/animal.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/animal.dart @@ -30,6 +30,7 @@ class Animal { name: r'className', required: true, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class Animal { name: r'color', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/api_response.dart index d1b0fa6294ee..f20f0f765f16 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/api_response.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/api_response.dart @@ -32,6 +32,7 @@ class ApiResponse { name: r'code', required: false, includeIfNull: false, + ) @@ -44,6 +45,7 @@ class ApiResponse { name: r'type', required: false, includeIfNull: false, + ) @@ -56,6 +58,7 @@ class ApiResponse { name: r'message', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_array_of_number_only.dart index e0e2d78b95b7..ce7cc3be9c9a 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_array_of_number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_array_of_number_only.dart @@ -28,6 +28,7 @@ class ArrayOfArrayOfNumberOnly { name: r'ArrayArrayNumber', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_number_only.dart index 9d9e0a197a2f..6014ca799690 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_number_only.dart @@ -28,6 +28,7 @@ class ArrayOfNumberOnly { name: r'ArrayNumber', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_test.dart index 30fdd53ab675..bb87e18b272f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_test.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_test.dart @@ -33,6 +33,7 @@ class ArrayTest { name: r'array_of_string', required: false, includeIfNull: false, + ) @@ -45,6 +46,7 @@ class ArrayTest { name: r'array_array_of_integer', required: false, includeIfNull: false, + ) @@ -57,6 +59,7 @@ class ArrayTest { name: r'array_array_of_model', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/capitalization.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/capitalization.dart index c2327b44f125..5bba94cd0e41 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/capitalization.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/capitalization.dart @@ -38,6 +38,7 @@ class Capitalization { name: r'smallCamel', required: false, includeIfNull: false, + ) @@ -50,6 +51,7 @@ class Capitalization { name: r'CapitalCamel', required: false, includeIfNull: false, + ) @@ -62,6 +64,7 @@ class Capitalization { name: r'small_Snake', required: false, includeIfNull: false, + ) @@ -74,6 +77,7 @@ class Capitalization { name: r'Capital_Snake', required: false, includeIfNull: false, + ) @@ -86,6 +90,7 @@ class Capitalization { name: r'SCA_ETH_Flow_Points', required: false, includeIfNull: false, + ) @@ -99,6 +104,7 @@ class Capitalization { name: r'ATT_NAME', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/cat.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/cat.dart index 05eebe01a67e..a62c730b131d 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/cat.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/cat.dart @@ -35,6 +35,7 @@ class Cat { name: r'className', required: true, includeIfNull: false, + ) @@ -47,6 +48,7 @@ class Cat { name: r'color', required: false, includeIfNull: false, + ) @@ -59,6 +61,7 @@ class Cat { name: r'declawed', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/category.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/category.dart index 35718dc06d5b..fcde551d9009 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/category.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/category.dart @@ -30,6 +30,7 @@ class Category { name: r'id', required: false, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class Category { name: r'name', required: true, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/child_with_nullable.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/child_with_nullable.dart index f0e430001673..160c03171345 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/child_with_nullable.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/child_with_nullable.dart @@ -35,6 +35,7 @@ class ChildWithNullable { name: r'type', required: false, includeIfNull: false, + ) @@ -47,6 +48,7 @@ class ChildWithNullable { name: r'nullableProperty', required: false, includeIfNull: false, + ) @@ -59,6 +61,7 @@ class ChildWithNullable { name: r'otherProperty', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/class_model.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/class_model.dart index 8802de37921e..eb01e8e0f249 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/class_model.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/class_model.dart @@ -28,6 +28,7 @@ class ClassModel { name: r'_class', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/deprecated_object.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/deprecated_object.dart index 844cda541b83..4fd8f19cc9c1 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/deprecated_object.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/deprecated_object.dart @@ -29,6 +29,7 @@ class DeprecatedObject { name: r'name', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/dog.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/dog.dart index 9dd6a37ffcee..e7ddf208db0b 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/dog.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/dog.dart @@ -35,6 +35,7 @@ class Dog { name: r'className', required: true, includeIfNull: false, + ) @@ -47,6 +48,7 @@ class Dog { name: r'color', required: false, includeIfNull: false, + ) @@ -59,6 +61,7 @@ class Dog { name: r'breed', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_arrays.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_arrays.dart index b1d9f2942b1d..2afd5f433349 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_arrays.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_arrays.dart @@ -30,6 +30,7 @@ class EnumArrays { name: r'just_symbol', required: false, includeIfNull: false, + unknownEnumValue: EnumArraysJustSymbolEnum.unknownDefaultOpenApi, ) @@ -43,6 +44,7 @@ class EnumArrays { name: r'array_enum', required: false, includeIfNull: false, + unknownEnumValue: List.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_test.dart index 1563c30bece7..a8723b8b3fe7 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_test.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_test.dart @@ -46,6 +46,7 @@ class EnumTest { name: r'enum_string', required: false, includeIfNull: false, + unknownEnumValue: EnumTestEnumStringEnum.unknownDefaultOpenApi, ) @@ -59,6 +60,7 @@ class EnumTest { name: r'enum_string_required', required: true, includeIfNull: false, + unknownEnumValue: EnumTestEnumStringRequiredEnum.unknownDefaultOpenApi, ) @@ -72,6 +74,7 @@ class EnumTest { name: r'enum_integer', required: false, includeIfNull: false, + unknownEnumValue: EnumTestEnumIntegerEnum.unknownDefaultOpenApi, ) @@ -85,6 +88,7 @@ class EnumTest { name: r'enum_number', required: false, includeIfNull: false, + unknownEnumValue: EnumTestEnumNumberEnum.unknownDefaultOpenApi, ) @@ -98,6 +102,7 @@ class EnumTest { name: r'outerEnum', required: false, includeIfNull: false, + unknownEnumValue: OuterEnum.unknownDefaultOpenApi, ) @@ -111,6 +116,7 @@ class EnumTest { name: r'outerEnumInteger', required: false, includeIfNull: false, + unknownEnumValue: OuterEnumInteger.unknownDefaultOpenApi, ) @@ -124,6 +130,7 @@ class EnumTest { name: r'outerEnumDefaultValue', required: false, includeIfNull: false, + unknownEnumValue: OuterEnumDefaultValue.unknownDefaultOpenApi, ) @@ -137,6 +144,7 @@ class EnumTest { name: r'outerEnumIntegerDefaultValue', required: false, includeIfNull: false, + unknownEnumValue: OuterEnumIntegerDefaultValue.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/fake_big_decimal_map200_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/fake_big_decimal_map200_response.dart index e15b863e9218..18046fc2f8d9 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/fake_big_decimal_map200_response.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/fake_big_decimal_map200_response.dart @@ -30,6 +30,7 @@ class FakeBigDecimalMap200Response { name: r'someId', required: false, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class FakeBigDecimalMap200Response { name: r'someMap', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/file_schema_test_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/file_schema_test_class.dart index 43307b721b15..f480f6b2909e 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/file_schema_test_class.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/file_schema_test_class.dart @@ -31,6 +31,7 @@ class FileSchemaTestClass { name: r'file', required: false, includeIfNull: false, + ) @@ -43,6 +44,7 @@ class FileSchemaTestClass { name: r'files', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo.dart index 0f214c4e6ff8..879a854b8672 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo.dart @@ -28,6 +28,7 @@ class Foo { name: r'bar', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo_get_default_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo_get_default_response.dart index 6a072cd6634b..ecc17a44934e 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo_get_default_response.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo_get_default_response.dart @@ -29,6 +29,7 @@ class FooGetDefaultResponse { name: r'string', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/format_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/format_test.dart index 1f8c47a279f7..7ab6f5fb2880 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/format_test.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/format_test.dart @@ -61,6 +61,7 @@ class FormatTest { name: r'integer', required: false, includeIfNull: false, + ) @@ -75,6 +76,7 @@ class FormatTest { name: r'int32', required: false, includeIfNull: false, + ) @@ -87,6 +89,7 @@ class FormatTest { name: r'int64', required: false, includeIfNull: false, + ) @@ -101,6 +104,7 @@ class FormatTest { name: r'number', required: true, includeIfNull: false, + ) @@ -115,6 +119,7 @@ class FormatTest { name: r'float', required: false, includeIfNull: false, + ) @@ -129,6 +134,7 @@ class FormatTest { name: r'double', required: false, includeIfNull: false, + ) @@ -141,6 +147,7 @@ class FormatTest { name: r'decimal', required: false, includeIfNull: false, + ) @@ -153,6 +160,7 @@ class FormatTest { name: r'string', required: false, includeIfNull: false, + ) @@ -165,6 +173,7 @@ class FormatTest { name: r'byte', required: true, includeIfNull: false, + ) @@ -184,6 +193,7 @@ class FormatTest { name: r'date', required: true, includeIfNull: false, + ) @@ -196,6 +206,7 @@ class FormatTest { name: r'dateTime', required: false, includeIfNull: false, + ) @@ -208,6 +219,7 @@ class FormatTest { name: r'uuid', required: false, includeIfNull: false, + ) @@ -220,6 +232,7 @@ class FormatTest { name: r'password', required: true, includeIfNull: false, + ) @@ -233,6 +246,7 @@ class FormatTest { name: r'pattern_with_digits', required: false, includeIfNull: false, + ) @@ -246,6 +260,7 @@ class FormatTest { name: r'pattern_with_digits_and_delimiter', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/has_only_read_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/has_only_read_only.dart index d224cbcf15dd..8231fe99fcff 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/has_only_read_only.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/has_only_read_only.dart @@ -30,6 +30,7 @@ class HasOnlyReadOnly { name: r'bar', required: false, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class HasOnlyReadOnly { name: r'foo', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/health_check_result.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/health_check_result.dart index 38dcfcacddca..e30bcdd03db8 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/health_check_result.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/health_check_result.dart @@ -28,6 +28,7 @@ class HealthCheckResult { name: r'NullableMessage', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/map_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/map_test.dart index 4a84fa85524f..18e778779507 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/map_test.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/map_test.dart @@ -34,6 +34,7 @@ class MapTest { name: r'map_map_of_string', required: false, includeIfNull: false, + ) @@ -46,6 +47,7 @@ class MapTest { name: r'map_of_enum_string', required: false, includeIfNull: false, + unknownEnumValue: Map.unknownDefaultOpenApi, ) @@ -59,6 +61,7 @@ class MapTest { name: r'direct_map', required: false, includeIfNull: false, + ) @@ -71,6 +74,7 @@ class MapTest { name: r'indirect_map', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/mixed_properties_and_additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/mixed_properties_and_additional_properties_class.dart index 63bc9d15ceda..847b850f171e 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/mixed_properties_and_additional_properties_class.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/mixed_properties_and_additional_properties_class.dart @@ -33,6 +33,7 @@ class MixedPropertiesAndAdditionalPropertiesClass { name: r'uuid', required: false, includeIfNull: false, + ) @@ -45,6 +46,7 @@ class MixedPropertiesAndAdditionalPropertiesClass { name: r'dateTime', required: false, includeIfNull: false, + ) @@ -57,6 +59,7 @@ class MixedPropertiesAndAdditionalPropertiesClass { name: r'map', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model200_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model200_response.dart index bee419bd3ee9..c19865c9787b 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model200_response.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model200_response.dart @@ -30,6 +30,7 @@ class Model200Response { name: r'name', required: false, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class Model200Response { name: r'class', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_client.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_client.dart index d6fef8505390..0ff4ff8154b2 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_client.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_client.dart @@ -28,6 +28,7 @@ class ModelClient { name: r'client', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_file.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_file.dart index c34131e2940f..96252bb35962 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_file.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_file.dart @@ -29,6 +29,7 @@ class ModelFile { name: r'sourceURI', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_list.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_list.dart index c99439660de6..e7edd8915f7c 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_list.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_list.dart @@ -28,6 +28,7 @@ class ModelList { name: r'123-list', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_return.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_return.dart index c29886c95b7e..81125ca83602 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_return.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_return.dart @@ -28,6 +28,7 @@ class ModelReturn { name: r'return', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/name.dart index 787a603a97fe..d8d6c7bcb28f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/name.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/name.dart @@ -34,6 +34,7 @@ class Name { name: r'name', required: true, includeIfNull: false, + ) @@ -46,6 +47,7 @@ class Name { name: r'snake_case', required: false, includeIfNull: false, + ) @@ -58,6 +60,7 @@ class Name { name: r'property', required: false, includeIfNull: false, + ) @@ -70,6 +73,7 @@ class Name { name: r'123Number', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/nullable_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/nullable_class.dart index 0ffb6db0f33f..854bd42c33e1 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/nullable_class.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/nullable_class.dart @@ -50,6 +50,7 @@ class NullableClass { name: r'integer_prop', required: false, includeIfNull: false, + ) @@ -62,6 +63,7 @@ class NullableClass { name: r'number_prop', required: false, includeIfNull: false, + ) @@ -74,6 +76,7 @@ class NullableClass { name: r'boolean_prop', required: false, includeIfNull: false, + ) @@ -86,6 +89,7 @@ class NullableClass { name: r'string_prop', required: false, includeIfNull: false, + ) @@ -98,6 +102,7 @@ class NullableClass { name: r'date_prop', required: false, includeIfNull: false, + ) @@ -110,6 +115,7 @@ class NullableClass { name: r'datetime_prop', required: false, includeIfNull: false, + ) @@ -122,6 +128,7 @@ class NullableClass { name: r'array_nullable_prop', required: false, includeIfNull: false, + ) @@ -134,6 +141,7 @@ class NullableClass { name: r'array_and_items_nullable_prop', required: false, includeIfNull: false, + ) @@ -146,6 +154,7 @@ class NullableClass { name: r'array_items_nullable', required: false, includeIfNull: false, + ) @@ -158,6 +167,7 @@ class NullableClass { name: r'object_nullable_prop', required: false, includeIfNull: false, + ) @@ -170,6 +180,7 @@ class NullableClass { name: r'object_and_items_nullable_prop', required: false, includeIfNull: false, + ) @@ -182,6 +193,7 @@ class NullableClass { name: r'object_items_nullable', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/number_only.dart index 2e8ff4201b8a..8c5f42d5bd76 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/number_only.dart @@ -28,6 +28,7 @@ class NumberOnly { name: r'JustNumber', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart index f75412a52d6c..ff730ff7c28a 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart @@ -32,6 +32,7 @@ class ObjectThatReferencesObjectsWithDuplicateInlineEnums { name: r'object_one', required: false, includeIfNull: false, + ) @@ -44,6 +45,7 @@ class ObjectThatReferencesObjectsWithDuplicateInlineEnums { name: r'object_two', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_deprecated_fields.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_deprecated_fields.dart index e2a95d308514..509e99e08614 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_deprecated_fields.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_deprecated_fields.dart @@ -35,6 +35,7 @@ class ObjectWithDeprecatedFields { name: r'uuid', required: false, includeIfNull: false, + ) @@ -48,6 +49,7 @@ class ObjectWithDeprecatedFields { name: r'id', required: false, includeIfNull: false, + ) @@ -61,6 +63,7 @@ class ObjectWithDeprecatedFields { name: r'deprecatedRef', required: false, includeIfNull: false, + ) @@ -74,6 +77,7 @@ class ObjectWithDeprecatedFields { name: r'bars', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_duplicate_inline_enum.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_duplicate_inline_enum.dart index 4734312e79e2..54f7f651725b 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_duplicate_inline_enum.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_duplicate_inline_enum.dart @@ -29,6 +29,7 @@ class ObjectWithDuplicateInlineEnum { name: r'attribute', required: false, includeIfNull: false, + unknownEnumValue: Set.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_enum.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_enum.dart index 7cbf5091e596..c49b6d987f24 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_enum.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_enum.dart @@ -29,6 +29,7 @@ class ObjectWithEnum { name: r'attribute', required: false, includeIfNull: false, + unknownEnumValue: TestEnum.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum.dart index 48e01ea5d998..c29fcd929219 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum.dart @@ -29,6 +29,7 @@ class ObjectWithInlineEnum { name: r'attribute', required: false, includeIfNull: false, + unknownEnumValue: Set.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum_default_value.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum_default_value.dart index 289025e07a44..35c52e7f8ff0 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum_default_value.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum_default_value.dart @@ -29,6 +29,7 @@ class ObjectWithInlineEnumDefaultValue { name: r'attribute', required: false, includeIfNull: false, + unknownEnumValue: ObjectWithInlineEnumDefaultValueAttributeEnum.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/order.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/order.dart index e50a3e70e819..eb11e0a377ef 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/order.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/order.dart @@ -38,6 +38,7 @@ class Order { name: r'id', required: false, includeIfNull: false, + ) @@ -50,6 +51,7 @@ class Order { name: r'petId', required: false, includeIfNull: false, + ) @@ -62,6 +64,7 @@ class Order { name: r'quantity', required: false, includeIfNull: false, + ) @@ -74,6 +77,7 @@ class Order { name: r'shipDate', required: false, includeIfNull: false, + ) @@ -87,6 +91,7 @@ class Order { name: r'status', required: false, includeIfNull: false, + unknownEnumValue: OrderStatusEnum.unknownDefaultOpenApi, ) @@ -100,6 +105,7 @@ class Order { name: r'complete', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_composite.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_composite.dart index 66a78af39ebc..6ab5fa4c4271 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_composite.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_composite.dart @@ -32,6 +32,7 @@ class OuterComposite { name: r'my_number', required: false, includeIfNull: false, + ) @@ -44,6 +45,7 @@ class OuterComposite { name: r'my_string', required: false, includeIfNull: false, + ) @@ -56,6 +58,7 @@ class OuterComposite { name: r'my_boolean', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_object_with_enum_property.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_object_with_enum_property.dart index 2708a3d953fd..1e230811a7b8 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_object_with_enum_property.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_object_with_enum_property.dart @@ -29,6 +29,7 @@ class OuterObjectWithEnumProperty { name: r'value', required: true, includeIfNull: false, + unknownEnumValue: OuterEnumInteger.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/parent_with_nullable.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/parent_with_nullable.dart index 121cf835d54d..26ea91dc9e8d 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/parent_with_nullable.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/parent_with_nullable.dart @@ -30,6 +30,7 @@ class ParentWithNullable { name: r'type', required: false, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class ParentWithNullable { name: r'nullableProperty', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/pet.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/pet.dart index b2674ae99fc6..a398249a8164 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/pet.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/pet.dart @@ -40,6 +40,7 @@ class Pet { name: r'id', required: false, includeIfNull: false, + ) @@ -52,6 +53,7 @@ class Pet { name: r'category', required: false, includeIfNull: false, + ) @@ -64,6 +66,7 @@ class Pet { name: r'name', required: true, includeIfNull: false, + ) @@ -76,6 +79,7 @@ class Pet { name: r'photoUrls', required: true, includeIfNull: false, + ) @@ -88,6 +92,7 @@ class Pet { name: r'tags', required: false, includeIfNull: false, + ) @@ -101,6 +106,7 @@ class Pet { name: r'status', required: false, includeIfNull: false, + unknownEnumValue: PetStatusEnum.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/read_only_first.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/read_only_first.dart index d276ea105f41..935585425c16 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/read_only_first.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/read_only_first.dart @@ -30,6 +30,7 @@ class ReadOnlyFirst { name: r'bar', required: false, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class ReadOnlyFirst { name: r'baz', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/special_model_name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/special_model_name.dart index 37053ba18f7e..4954995c4759 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/special_model_name.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/special_model_name.dart @@ -28,6 +28,7 @@ class SpecialModelName { name: r'$special[property.name]', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/tag.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/tag.dart index ca1d4ed43ebc..bc5def549910 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/tag.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/tag.dart @@ -30,6 +30,7 @@ class Tag { name: r'id', required: false, includeIfNull: false, + ) @@ -42,6 +43,7 @@ class Tag { name: r'name', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/test_inline_freeform_additional_properties_request.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/test_inline_freeform_additional_properties_request.dart index 2eb68120e147..1002f6f7c880 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/test_inline_freeform_additional_properties_request.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/test_inline_freeform_additional_properties_request.dart @@ -28,6 +28,7 @@ class TestInlineFreeformAdditionalPropertiesRequest { name: r'someProperty', required: false, includeIfNull: false, + ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/user.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/user.dart index 15e9b2a2eb61..970a01c875c3 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/user.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/user.dart @@ -42,6 +42,7 @@ class User { name: r'id', required: false, includeIfNull: false, + ) @@ -54,6 +55,7 @@ class User { name: r'username', required: false, includeIfNull: false, + ) @@ -66,6 +68,7 @@ class User { name: r'firstName', required: false, includeIfNull: false, + ) @@ -78,6 +81,7 @@ class User { name: r'lastName', required: false, includeIfNull: false, + ) @@ -90,6 +94,7 @@ class User { name: r'email', required: false, includeIfNull: false, + ) @@ -102,6 +107,7 @@ class User { name: r'password', required: false, includeIfNull: false, + ) @@ -114,6 +120,7 @@ class User { name: r'phone', required: false, includeIfNull: false, + ) @@ -127,6 +134,7 @@ class User { name: r'userStatus', required: false, includeIfNull: false, + ) From ab2213bdd8f8ac1a68afc02dc6c4acfa5600486c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eirik=20Brandtz=C3=A6g?= Date: Thu, 26 Feb 2026 12:21:55 +0100 Subject: [PATCH 14/14] Fix extra blank lines in dart-dio json_serializable template output --- .../json_serializable/class.mustache | 12 ++++-------- .../src/model/additional_properties_class.dart | 2 -- .../lib/src/model/all_of_with_single_ref.dart | 2 -- .../lib/src/model/animal.dart | 2 -- .../lib/src/model/api_response.dart | 3 --- .../src/model/array_of_array_of_number_only.dart | 1 - .../lib/src/model/array_of_number_only.dart | 1 - .../lib/src/model/array_test.dart | 3 --- .../lib/src/model/capitalization.dart | 6 ------ .../lib/src/model/cat.dart | 3 --- .../lib/src/model/category.dart | 2 -- .../lib/src/model/child_with_nullable.dart | 3 --- .../lib/src/model/class_model.dart | 1 - .../lib/src/model/deprecated_object.dart | 1 - .../lib/src/model/dog.dart | 3 --- .../lib/src/model/enum_arrays.dart | 2 -- .../lib/src/model/enum_test.dart | 8 -------- .../model/fake_big_decimal_map200_response.dart | 2 -- .../lib/src/model/file_schema_test_class.dart | 2 -- .../lib/src/model/foo.dart | 1 - .../lib/src/model/foo_get_default_response.dart | 1 - .../lib/src/model/format_test.dart | 15 --------------- .../lib/src/model/has_only_read_only.dart | 2 -- .../lib/src/model/health_check_result.dart | 1 - .../lib/src/model/map_test.dart | 4 ---- ...roperties_and_additional_properties_class.dart | 3 --- .../lib/src/model/model200_response.dart | 2 -- .../lib/src/model/model_client.dart | 1 - .../lib/src/model/model_file.dart | 1 - .../lib/src/model/model_list.dart | 1 - .../lib/src/model/model_return.dart | 1 - .../lib/src/model/name.dart | 4 ---- .../lib/src/model/nullable_class.dart | 12 ------------ .../lib/src/model/number_only.dart | 1 - ...ences_objects_with_duplicate_inline_enums.dart | 2 -- .../src/model/object_with_deprecated_fields.dart | 4 ---- .../model/object_with_duplicate_inline_enum.dart | 1 - .../lib/src/model/object_with_enum.dart | 1 - .../lib/src/model/object_with_inline_enum.dart | 1 - .../object_with_inline_enum_default_value.dart | 1 - .../lib/src/model/order.dart | 6 ------ .../lib/src/model/outer_composite.dart | 3 --- .../model/outer_object_with_enum_property.dart | 1 - .../lib/src/model/parent_with_nullable.dart | 2 -- .../lib/src/model/pet.dart | 6 ------ .../lib/src/model/read_only_first.dart | 2 -- .../lib/src/model/special_model_name.dart | 1 - .../lib/src/model/tag.dart | 2 -- ...ne_freeform_additional_properties_request.dart | 1 - .../lib/src/model/user.dart | 8 -------- 50 files changed, 4 insertions(+), 147 deletions(-) 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 163063f0719f..73e37f9c373e 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 @@ -52,17 +52,13 @@ class {{{classname}}} { @Deprecated('{{{name}}} has been deprecated') {{/deprecated}} {{^isBinary}} -{{^required}} -{{#useOptional}} - @OptionalConverter() -{{/useOptional}} -{{/required}} - @JsonKey( +{{^required}}{{#useOptional}} @OptionalConverter() +{{/useOptional}}{{/required}} @JsonKey( {{#defaultValue}}defaultValue: {{{defaultValue}}},{{/defaultValue}} name: r'{{{baseName}}}', required: {{#required}}true{{/required}}{{^required}}false{{/required}}, - includeIfNull: {{#required}}{{#isNullable}}true{{/isNullable}}{{^isNullable}}false{{/isNullable}}{{/required}}{{^required}}false{{/required}}, -{{^required}}{{#useOptional}} readValue: readOptionalValue,{{/useOptional}}{{/required}} + includeIfNull: {{#required}}{{#isNullable}}true{{/isNullable}}{{^isNullable}}false{{/isNullable}}{{/required}}{{^required}}false{{/required}},{{^required}}{{#useOptional}} + readValue: readOptionalValue,{{/useOptional}}{{/required}} {{#isEnumOrRef}} {{#enumUnknownDefaultCase}} unknownEnumValue: {{{datatypeWithEnum}}}.unknownDefaultOpenApi, diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/additional_properties_class.dart index 9268d446c6ef..cfbc5ef08f77 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/additional_properties_class.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/additional_properties_class.dart @@ -32,7 +32,6 @@ class AdditionalPropertiesClass { name: r'map_property', required: false, includeIfNull: false, - ) @@ -45,7 +44,6 @@ class AdditionalPropertiesClass { name: r'map_of_map_property', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/all_of_with_single_ref.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/all_of_with_single_ref.dart index cc319f9f3d7e..775b58a1fca6 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/all_of_with_single_ref.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/all_of_with_single_ref.dart @@ -31,7 +31,6 @@ class AllOfWithSingleRef { name: r'username', required: false, includeIfNull: false, - ) @@ -44,7 +43,6 @@ class AllOfWithSingleRef { name: r'SingleRefType', required: false, includeIfNull: false, - unknownEnumValue: SingleRefType.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/animal.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/animal.dart index a4f81ea92aca..c9abb12b9308 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/animal.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/animal.dart @@ -30,7 +30,6 @@ class Animal { name: r'className', required: true, includeIfNull: false, - ) @@ -43,7 +42,6 @@ class Animal { name: r'color', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/api_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/api_response.dart index f20f0f765f16..d1b0fa6294ee 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/api_response.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/api_response.dart @@ -32,7 +32,6 @@ class ApiResponse { name: r'code', required: false, includeIfNull: false, - ) @@ -45,7 +44,6 @@ class ApiResponse { name: r'type', required: false, includeIfNull: false, - ) @@ -58,7 +56,6 @@ class ApiResponse { name: r'message', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_array_of_number_only.dart index ce7cc3be9c9a..e0e2d78b95b7 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_array_of_number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_array_of_number_only.dart @@ -28,7 +28,6 @@ class ArrayOfArrayOfNumberOnly { name: r'ArrayArrayNumber', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_number_only.dart index 6014ca799690..9d9e0a197a2f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_of_number_only.dart @@ -28,7 +28,6 @@ class ArrayOfNumberOnly { name: r'ArrayNumber', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_test.dart index bb87e18b272f..30fdd53ab675 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_test.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/array_test.dart @@ -33,7 +33,6 @@ class ArrayTest { name: r'array_of_string', required: false, includeIfNull: false, - ) @@ -46,7 +45,6 @@ class ArrayTest { name: r'array_array_of_integer', required: false, includeIfNull: false, - ) @@ -59,7 +57,6 @@ class ArrayTest { name: r'array_array_of_model', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/capitalization.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/capitalization.dart index 5bba94cd0e41..c2327b44f125 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/capitalization.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/capitalization.dart @@ -38,7 +38,6 @@ class Capitalization { name: r'smallCamel', required: false, includeIfNull: false, - ) @@ -51,7 +50,6 @@ class Capitalization { name: r'CapitalCamel', required: false, includeIfNull: false, - ) @@ -64,7 +62,6 @@ class Capitalization { name: r'small_Snake', required: false, includeIfNull: false, - ) @@ -77,7 +74,6 @@ class Capitalization { name: r'Capital_Snake', required: false, includeIfNull: false, - ) @@ -90,7 +86,6 @@ class Capitalization { name: r'SCA_ETH_Flow_Points', required: false, includeIfNull: false, - ) @@ -104,7 +99,6 @@ class Capitalization { name: r'ATT_NAME', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/cat.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/cat.dart index a62c730b131d..05eebe01a67e 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/cat.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/cat.dart @@ -35,7 +35,6 @@ class Cat { name: r'className', required: true, includeIfNull: false, - ) @@ -48,7 +47,6 @@ class Cat { name: r'color', required: false, includeIfNull: false, - ) @@ -61,7 +59,6 @@ class Cat { name: r'declawed', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/category.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/category.dart index fcde551d9009..35718dc06d5b 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/category.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/category.dart @@ -30,7 +30,6 @@ class Category { name: r'id', required: false, includeIfNull: false, - ) @@ -43,7 +42,6 @@ class Category { name: r'name', required: true, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/child_with_nullable.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/child_with_nullable.dart index 160c03171345..f0e430001673 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/child_with_nullable.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/child_with_nullable.dart @@ -35,7 +35,6 @@ class ChildWithNullable { name: r'type', required: false, includeIfNull: false, - ) @@ -48,7 +47,6 @@ class ChildWithNullable { name: r'nullableProperty', required: false, includeIfNull: false, - ) @@ -61,7 +59,6 @@ class ChildWithNullable { name: r'otherProperty', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/class_model.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/class_model.dart index eb01e8e0f249..8802de37921e 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/class_model.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/class_model.dart @@ -28,7 +28,6 @@ class ClassModel { name: r'_class', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/deprecated_object.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/deprecated_object.dart index 4fd8f19cc9c1..844cda541b83 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/deprecated_object.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/deprecated_object.dart @@ -29,7 +29,6 @@ class DeprecatedObject { name: r'name', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/dog.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/dog.dart index e7ddf208db0b..9dd6a37ffcee 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/dog.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/dog.dart @@ -35,7 +35,6 @@ class Dog { name: r'className', required: true, includeIfNull: false, - ) @@ -48,7 +47,6 @@ class Dog { name: r'color', required: false, includeIfNull: false, - ) @@ -61,7 +59,6 @@ class Dog { name: r'breed', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_arrays.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_arrays.dart index 2afd5f433349..b1d9f2942b1d 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_arrays.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_arrays.dart @@ -30,7 +30,6 @@ class EnumArrays { name: r'just_symbol', required: false, includeIfNull: false, - unknownEnumValue: EnumArraysJustSymbolEnum.unknownDefaultOpenApi, ) @@ -44,7 +43,6 @@ class EnumArrays { name: r'array_enum', required: false, includeIfNull: false, - unknownEnumValue: List.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_test.dart index a8723b8b3fe7..1563c30bece7 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_test.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/enum_test.dart @@ -46,7 +46,6 @@ class EnumTest { name: r'enum_string', required: false, includeIfNull: false, - unknownEnumValue: EnumTestEnumStringEnum.unknownDefaultOpenApi, ) @@ -60,7 +59,6 @@ class EnumTest { name: r'enum_string_required', required: true, includeIfNull: false, - unknownEnumValue: EnumTestEnumStringRequiredEnum.unknownDefaultOpenApi, ) @@ -74,7 +72,6 @@ class EnumTest { name: r'enum_integer', required: false, includeIfNull: false, - unknownEnumValue: EnumTestEnumIntegerEnum.unknownDefaultOpenApi, ) @@ -88,7 +85,6 @@ class EnumTest { name: r'enum_number', required: false, includeIfNull: false, - unknownEnumValue: EnumTestEnumNumberEnum.unknownDefaultOpenApi, ) @@ -102,7 +98,6 @@ class EnumTest { name: r'outerEnum', required: false, includeIfNull: false, - unknownEnumValue: OuterEnum.unknownDefaultOpenApi, ) @@ -116,7 +111,6 @@ class EnumTest { name: r'outerEnumInteger', required: false, includeIfNull: false, - unknownEnumValue: OuterEnumInteger.unknownDefaultOpenApi, ) @@ -130,7 +124,6 @@ class EnumTest { name: r'outerEnumDefaultValue', required: false, includeIfNull: false, - unknownEnumValue: OuterEnumDefaultValue.unknownDefaultOpenApi, ) @@ -144,7 +137,6 @@ class EnumTest { name: r'outerEnumIntegerDefaultValue', required: false, includeIfNull: false, - unknownEnumValue: OuterEnumIntegerDefaultValue.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/fake_big_decimal_map200_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/fake_big_decimal_map200_response.dart index 18046fc2f8d9..e15b863e9218 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/fake_big_decimal_map200_response.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/fake_big_decimal_map200_response.dart @@ -30,7 +30,6 @@ class FakeBigDecimalMap200Response { name: r'someId', required: false, includeIfNull: false, - ) @@ -43,7 +42,6 @@ class FakeBigDecimalMap200Response { name: r'someMap', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/file_schema_test_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/file_schema_test_class.dart index f480f6b2909e..43307b721b15 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/file_schema_test_class.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/file_schema_test_class.dart @@ -31,7 +31,6 @@ class FileSchemaTestClass { name: r'file', required: false, includeIfNull: false, - ) @@ -44,7 +43,6 @@ class FileSchemaTestClass { name: r'files', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo.dart index 879a854b8672..0f214c4e6ff8 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo.dart @@ -28,7 +28,6 @@ class Foo { name: r'bar', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo_get_default_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo_get_default_response.dart index ecc17a44934e..6a072cd6634b 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo_get_default_response.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/foo_get_default_response.dart @@ -29,7 +29,6 @@ class FooGetDefaultResponse { name: r'string', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/format_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/format_test.dart index 7ab6f5fb2880..1f8c47a279f7 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/format_test.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/format_test.dart @@ -61,7 +61,6 @@ class FormatTest { name: r'integer', required: false, includeIfNull: false, - ) @@ -76,7 +75,6 @@ class FormatTest { name: r'int32', required: false, includeIfNull: false, - ) @@ -89,7 +87,6 @@ class FormatTest { name: r'int64', required: false, includeIfNull: false, - ) @@ -104,7 +101,6 @@ class FormatTest { name: r'number', required: true, includeIfNull: false, - ) @@ -119,7 +115,6 @@ class FormatTest { name: r'float', required: false, includeIfNull: false, - ) @@ -134,7 +129,6 @@ class FormatTest { name: r'double', required: false, includeIfNull: false, - ) @@ -147,7 +141,6 @@ class FormatTest { name: r'decimal', required: false, includeIfNull: false, - ) @@ -160,7 +153,6 @@ class FormatTest { name: r'string', required: false, includeIfNull: false, - ) @@ -173,7 +165,6 @@ class FormatTest { name: r'byte', required: true, includeIfNull: false, - ) @@ -193,7 +184,6 @@ class FormatTest { name: r'date', required: true, includeIfNull: false, - ) @@ -206,7 +196,6 @@ class FormatTest { name: r'dateTime', required: false, includeIfNull: false, - ) @@ -219,7 +208,6 @@ class FormatTest { name: r'uuid', required: false, includeIfNull: false, - ) @@ -232,7 +220,6 @@ class FormatTest { name: r'password', required: true, includeIfNull: false, - ) @@ -246,7 +233,6 @@ class FormatTest { name: r'pattern_with_digits', required: false, includeIfNull: false, - ) @@ -260,7 +246,6 @@ class FormatTest { name: r'pattern_with_digits_and_delimiter', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/has_only_read_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/has_only_read_only.dart index 8231fe99fcff..d224cbcf15dd 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/has_only_read_only.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/has_only_read_only.dart @@ -30,7 +30,6 @@ class HasOnlyReadOnly { name: r'bar', required: false, includeIfNull: false, - ) @@ -43,7 +42,6 @@ class HasOnlyReadOnly { name: r'foo', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/health_check_result.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/health_check_result.dart index e30bcdd03db8..38dcfcacddca 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/health_check_result.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/health_check_result.dart @@ -28,7 +28,6 @@ class HealthCheckResult { name: r'NullableMessage', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/map_test.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/map_test.dart index 18e778779507..4a84fa85524f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/map_test.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/map_test.dart @@ -34,7 +34,6 @@ class MapTest { name: r'map_map_of_string', required: false, includeIfNull: false, - ) @@ -47,7 +46,6 @@ class MapTest { name: r'map_of_enum_string', required: false, includeIfNull: false, - unknownEnumValue: Map.unknownDefaultOpenApi, ) @@ -61,7 +59,6 @@ class MapTest { name: r'direct_map', required: false, includeIfNull: false, - ) @@ -74,7 +71,6 @@ class MapTest { name: r'indirect_map', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/mixed_properties_and_additional_properties_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/mixed_properties_and_additional_properties_class.dart index 847b850f171e..63bc9d15ceda 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/mixed_properties_and_additional_properties_class.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/mixed_properties_and_additional_properties_class.dart @@ -33,7 +33,6 @@ class MixedPropertiesAndAdditionalPropertiesClass { name: r'uuid', required: false, includeIfNull: false, - ) @@ -46,7 +45,6 @@ class MixedPropertiesAndAdditionalPropertiesClass { name: r'dateTime', required: false, includeIfNull: false, - ) @@ -59,7 +57,6 @@ class MixedPropertiesAndAdditionalPropertiesClass { name: r'map', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model200_response.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model200_response.dart index c19865c9787b..bee419bd3ee9 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model200_response.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model200_response.dart @@ -30,7 +30,6 @@ class Model200Response { name: r'name', required: false, includeIfNull: false, - ) @@ -43,7 +42,6 @@ class Model200Response { name: r'class', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_client.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_client.dart index 0ff4ff8154b2..d6fef8505390 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_client.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_client.dart @@ -28,7 +28,6 @@ class ModelClient { name: r'client', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_file.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_file.dart index 96252bb35962..c34131e2940f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_file.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_file.dart @@ -29,7 +29,6 @@ class ModelFile { name: r'sourceURI', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_list.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_list.dart index e7edd8915f7c..c99439660de6 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_list.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_list.dart @@ -28,7 +28,6 @@ class ModelList { name: r'123-list', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_return.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_return.dart index 81125ca83602..c29886c95b7e 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_return.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/model_return.dart @@ -28,7 +28,6 @@ class ModelReturn { name: r'return', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/name.dart index d8d6c7bcb28f..787a603a97fe 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/name.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/name.dart @@ -34,7 +34,6 @@ class Name { name: r'name', required: true, includeIfNull: false, - ) @@ -47,7 +46,6 @@ class Name { name: r'snake_case', required: false, includeIfNull: false, - ) @@ -60,7 +58,6 @@ class Name { name: r'property', required: false, includeIfNull: false, - ) @@ -73,7 +70,6 @@ class Name { name: r'123Number', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/nullable_class.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/nullable_class.dart index 854bd42c33e1..0ffb6db0f33f 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/nullable_class.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/nullable_class.dart @@ -50,7 +50,6 @@ class NullableClass { name: r'integer_prop', required: false, includeIfNull: false, - ) @@ -63,7 +62,6 @@ class NullableClass { name: r'number_prop', required: false, includeIfNull: false, - ) @@ -76,7 +74,6 @@ class NullableClass { name: r'boolean_prop', required: false, includeIfNull: false, - ) @@ -89,7 +86,6 @@ class NullableClass { name: r'string_prop', required: false, includeIfNull: false, - ) @@ -102,7 +98,6 @@ class NullableClass { name: r'date_prop', required: false, includeIfNull: false, - ) @@ -115,7 +110,6 @@ class NullableClass { name: r'datetime_prop', required: false, includeIfNull: false, - ) @@ -128,7 +122,6 @@ class NullableClass { name: r'array_nullable_prop', required: false, includeIfNull: false, - ) @@ -141,7 +134,6 @@ class NullableClass { name: r'array_and_items_nullable_prop', required: false, includeIfNull: false, - ) @@ -154,7 +146,6 @@ class NullableClass { name: r'array_items_nullable', required: false, includeIfNull: false, - ) @@ -167,7 +158,6 @@ class NullableClass { name: r'object_nullable_prop', required: false, includeIfNull: false, - ) @@ -180,7 +170,6 @@ class NullableClass { name: r'object_and_items_nullable_prop', required: false, includeIfNull: false, - ) @@ -193,7 +182,6 @@ class NullableClass { name: r'object_items_nullable', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/number_only.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/number_only.dart index 8c5f42d5bd76..2e8ff4201b8a 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/number_only.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/number_only.dart @@ -28,7 +28,6 @@ class NumberOnly { name: r'JustNumber', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart index ff730ff7c28a..f75412a52d6c 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart @@ -32,7 +32,6 @@ class ObjectThatReferencesObjectsWithDuplicateInlineEnums { name: r'object_one', required: false, includeIfNull: false, - ) @@ -45,7 +44,6 @@ class ObjectThatReferencesObjectsWithDuplicateInlineEnums { name: r'object_two', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_deprecated_fields.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_deprecated_fields.dart index 509e99e08614..e2a95d308514 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_deprecated_fields.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_deprecated_fields.dart @@ -35,7 +35,6 @@ class ObjectWithDeprecatedFields { name: r'uuid', required: false, includeIfNull: false, - ) @@ -49,7 +48,6 @@ class ObjectWithDeprecatedFields { name: r'id', required: false, includeIfNull: false, - ) @@ -63,7 +61,6 @@ class ObjectWithDeprecatedFields { name: r'deprecatedRef', required: false, includeIfNull: false, - ) @@ -77,7 +74,6 @@ class ObjectWithDeprecatedFields { name: r'bars', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_duplicate_inline_enum.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_duplicate_inline_enum.dart index 54f7f651725b..4734312e79e2 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_duplicate_inline_enum.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_duplicate_inline_enum.dart @@ -29,7 +29,6 @@ class ObjectWithDuplicateInlineEnum { name: r'attribute', required: false, includeIfNull: false, - unknownEnumValue: Set.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_enum.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_enum.dart index c49b6d987f24..7cbf5091e596 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_enum.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_enum.dart @@ -29,7 +29,6 @@ class ObjectWithEnum { name: r'attribute', required: false, includeIfNull: false, - unknownEnumValue: TestEnum.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum.dart index c29fcd929219..48e01ea5d998 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum.dart @@ -29,7 +29,6 @@ class ObjectWithInlineEnum { name: r'attribute', required: false, includeIfNull: false, - unknownEnumValue: Set.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum_default_value.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum_default_value.dart index 35c52e7f8ff0..289025e07a44 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum_default_value.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/object_with_inline_enum_default_value.dart @@ -29,7 +29,6 @@ class ObjectWithInlineEnumDefaultValue { name: r'attribute', required: false, includeIfNull: false, - unknownEnumValue: ObjectWithInlineEnumDefaultValueAttributeEnum.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/order.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/order.dart index eb11e0a377ef..e50a3e70e819 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/order.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/order.dart @@ -38,7 +38,6 @@ class Order { name: r'id', required: false, includeIfNull: false, - ) @@ -51,7 +50,6 @@ class Order { name: r'petId', required: false, includeIfNull: false, - ) @@ -64,7 +62,6 @@ class Order { name: r'quantity', required: false, includeIfNull: false, - ) @@ -77,7 +74,6 @@ class Order { name: r'shipDate', required: false, includeIfNull: false, - ) @@ -91,7 +87,6 @@ class Order { name: r'status', required: false, includeIfNull: false, - unknownEnumValue: OrderStatusEnum.unknownDefaultOpenApi, ) @@ -105,7 +100,6 @@ class Order { name: r'complete', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_composite.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_composite.dart index 6ab5fa4c4271..66a78af39ebc 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_composite.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_composite.dart @@ -32,7 +32,6 @@ class OuterComposite { name: r'my_number', required: false, includeIfNull: false, - ) @@ -45,7 +44,6 @@ class OuterComposite { name: r'my_string', required: false, includeIfNull: false, - ) @@ -58,7 +56,6 @@ class OuterComposite { name: r'my_boolean', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_object_with_enum_property.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_object_with_enum_property.dart index 1e230811a7b8..2708a3d953fd 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_object_with_enum_property.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/outer_object_with_enum_property.dart @@ -29,7 +29,6 @@ class OuterObjectWithEnumProperty { name: r'value', required: true, includeIfNull: false, - unknownEnumValue: OuterEnumInteger.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/parent_with_nullable.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/parent_with_nullable.dart index 26ea91dc9e8d..121cf835d54d 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/parent_with_nullable.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/parent_with_nullable.dart @@ -30,7 +30,6 @@ class ParentWithNullable { name: r'type', required: false, includeIfNull: false, - ) @@ -43,7 +42,6 @@ class ParentWithNullable { name: r'nullableProperty', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/pet.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/pet.dart index a398249a8164..b2674ae99fc6 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/pet.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/pet.dart @@ -40,7 +40,6 @@ class Pet { name: r'id', required: false, includeIfNull: false, - ) @@ -53,7 +52,6 @@ class Pet { name: r'category', required: false, includeIfNull: false, - ) @@ -66,7 +64,6 @@ class Pet { name: r'name', required: true, includeIfNull: false, - ) @@ -79,7 +76,6 @@ class Pet { name: r'photoUrls', required: true, includeIfNull: false, - ) @@ -92,7 +88,6 @@ class Pet { name: r'tags', required: false, includeIfNull: false, - ) @@ -106,7 +101,6 @@ class Pet { name: r'status', required: false, includeIfNull: false, - unknownEnumValue: PetStatusEnum.unknownDefaultOpenApi, ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/read_only_first.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/read_only_first.dart index 935585425c16..d276ea105f41 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/read_only_first.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/read_only_first.dart @@ -30,7 +30,6 @@ class ReadOnlyFirst { name: r'bar', required: false, includeIfNull: false, - ) @@ -43,7 +42,6 @@ class ReadOnlyFirst { name: r'baz', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/special_model_name.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/special_model_name.dart index 4954995c4759..37053ba18f7e 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/special_model_name.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/special_model_name.dart @@ -28,7 +28,6 @@ class SpecialModelName { name: r'$special[property.name]', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/tag.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/tag.dart index bc5def549910..ca1d4ed43ebc 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/tag.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/tag.dart @@ -30,7 +30,6 @@ class Tag { name: r'id', required: false, includeIfNull: false, - ) @@ -43,7 +42,6 @@ class Tag { name: r'name', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/test_inline_freeform_additional_properties_request.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/test_inline_freeform_additional_properties_request.dart index 1002f6f7c880..2eb68120e147 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/test_inline_freeform_additional_properties_request.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/test_inline_freeform_additional_properties_request.dart @@ -28,7 +28,6 @@ class TestInlineFreeformAdditionalPropertiesRequest { name: r'someProperty', required: false, includeIfNull: false, - ) diff --git a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/user.dart b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/user.dart index 970a01c875c3..15e9b2a2eb61 100644 --- a/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/user.dart +++ b/samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/model/user.dart @@ -42,7 +42,6 @@ class User { name: r'id', required: false, includeIfNull: false, - ) @@ -55,7 +54,6 @@ class User { name: r'username', required: false, includeIfNull: false, - ) @@ -68,7 +66,6 @@ class User { name: r'firstName', required: false, includeIfNull: false, - ) @@ -81,7 +78,6 @@ class User { name: r'lastName', required: false, includeIfNull: false, - ) @@ -94,7 +90,6 @@ class User { name: r'email', required: false, includeIfNull: false, - ) @@ -107,7 +102,6 @@ class User { name: r'password', required: false, includeIfNull: false, - ) @@ -120,7 +114,6 @@ class User { name: r'phone', required: false, includeIfNull: false, - ) @@ -134,7 +127,6 @@ class User { name: r'userStatus', required: false, includeIfNull: false, - )